C ++错误:没有命名类型,模板化类

时间:2017-11-17 23:32:54

标签: c++

我正在命名空间中设计一个模板化的类,我无法理解为什么我会收到这个错误:'Test'没有命名一个类型。它似乎只是给构造函数和析构函数定义这个错误。任何帮助将不胜感激。

注意:我正在为类分配执行此操作,并且必须按照我的方式设置这些文件。我必须有一个test.h文件,test.hpp包含在test.h中。

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

2 个答案:

答案 0 :(得分:2)

您的实施文件未指定正确的命名空间,因此无法找到mynamespace::Test。如果您将其更改为包含命名空间,它将起作用:

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

}

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

}

答案 1 :(得分:1)

由于您在结束括号后包含文件,因此test.hpp的内容位于命名空间之外。

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