2017-11-17 96 views
1

我正在设计一个命名空间内的模板类,我不明白为什么我得到这个错误:'测试'没有命名一个类型。它似乎只给我这个构造函数和析构函数定义的错误。任何帮助将非常感激。C++错误:不命名类型,模板类

注意:我这样做是为了一个班级作业,并且必须保持这些文件的设置方式。我必须在test.h中包含一个test.h文件和test.hpp。

test.h:

#ifndef TEST_H 
#define TEST_H 

namespace mynamespace 
{ 
    template <typename A, typename B> 
    class Test 
    { 
      public: 

        // constructor   
        Test(); 

        // destructor 
        ~Test(); 
    }; 
}  

#include "test.hpp" 

#endif 

test.hpp:

// constructor 
template <typename A, typename B> 
Test<A, B>::Test() 
{ 

} 

// destructor 
template <typename A, typename B> 
Test<A, B>::~Test() 
{ 

} 

main.cpp中:

#include "test.h" 

using namespace mynamespace; 

int main() 
{ 
    return 0; 
} 

生成文件:

CC = g++ -std=c++11 -Wall -pedantic 

main.x: main.o 
     $(CC) -o main.x main.o 

main.o: main.cpp test.h 
     $(CC) -c main.cpp 

clean: 
     rm *.o *.x 
+1

这是排字错误?有两个As。 'template ' – MFisherKDX

+2

'test.hpp'和'test.h'? – nikomaster

+0

是的,这两个As是一个错字。 – gabsiew

回答

2

您的实施文件没有指定正确的命名空间,所以他们找不到mynamespace::Test。如果您将其更改为包含名称空间,它将起作用:

template <typename A, typename B> 
mynamespace::Test<A, B>::Test() 
{ 

} 

// destructor 
template <typename A, typename B> 
mynamespace::Test<A, B>::~Test() 
{ 

} 
+0

谢谢!我只是简单地移动了我的#include“test.hpp”语句,以便它位于命名空间中,并且不再收到错误。 – gabsiew

1

test.hpp的内容在命名空间之外,因为您在结束大括号之后包含该文件。

正如其他评论者所指出的,将实现拆分为另一个文件对于模板并不常见,但如果您需要这样做,则可以通过将名称空间添加到test.hpp来修复它。