72901


提示したコードはテンプレートクラスのサンプルコードで、これは正しくコンパイルできます。  
しかし提示サイトの GitHub ではこれと同じようなことをしてもコンパイルエラーが出ます。沢山出るので全部は載せられませんがどうしたらいいのでしょうか？
**Mesh.cpp Mesh.hpp** 部です。

コードが長く全部載せられないため GitHub という形を取りました。よろしくお願いします。

<https://github.com/Shigurechan/OpenGL_Game>

[code]

    #include <iostream>
    #include <vector>
    
    class test
    {
    public:
    
        test();
        void f();
    };
    
    struct vert
    {
        int a;
        int b;
    };
    typedef vert vertex;
    
    template<class type>
    class sample : private test
    {
    public:
        sample(type a);
        void f();
    };
    
    // std::vector　
    template<>
    class sample<std::vector<vertex>> : private test
    {
    public:
        sample(std::vector<vertex> a);
    
        void f();
    };
    
[/code]

* * *
[code]

    #include "Test.hpp"
    #include <iostream>
    #include <vector>
    
    test::test()
    {
        printf("test\n");
    }
    
    void test::f()
    {
        printf("fff\n");
    }
    
    sample<std::vector<vertex>>::sample(std::vector<vertex> a) : test()
    {
        printf("sample");
    }
    
    void sample<std::vector<vertex>>::f()
    {
        printf("えええ\n");
    }
    
[/code]


CC BY-SA 4.0
2020-12-26T01:24:19.990
72894
2020-12-26T06:59:29.830
2020-12-26T06:59:29.830
3060
question
c++
テンプレートクラスで規模が大きくなるとなぜかコンパイルが通らない原因とは？


何が如何なっていれば良いのか、が今の質問内容からは良く分かりませんが、以下のように変更するとビルドは通るようになります。

Microsoft Visual Studio Community 2019 Version 16.8.3  
x64 Debugモード

  * 両方のファイル名を、`Mesh.hpp`,`Mesh.cpp`ではなく、`Test.hpp`,`Test.cpp`に変更する  
質問ソースの`Mesh.cpp`の先頭行が`#include "Test.hpp"`であり、質問の説明テキスト部分との整合性が崩れているため

  * 現在は影響無いが、他の`.hpp`に合わせるために、`Test.hpp`ファイルの先頭に`#pragma once`を入れるか、他と同様に先頭と最後に`#ifndef __TEST_HPP_`で始まるインクルードガードを入れておく

質問に提示されている、ファイル・クラス・メソッドの各名前があまり具体的とは言えないことと、それらを実際に使う部分のソースが無いので、それを含めた整合性はどうなのか？
に疑問は残りますが、一応は上記でビルドが通るようになります。


CC BY-SA 4.0
2020-12-26T06:10:10.627
72901
2020-12-26T06:10:10.627
26370
72894
answer