Men*_*des -2 c++ ubuntu inheritance templates g++
我浏览了其他类似主题,但没有找到问题的答案......
下面的代码说明了这种情况.基类和派生类:
Base.hpp
namespace test {
template<class T>
class Base {
public:
Base();
virtual ~Base();
};
}
Run Code Online (Sandbox Code Playgroud)
Base.cpp
#include "Base.hpp"
namespace test {
template<class T>
Base<T>::Base() {
// TODO Auto-generated constructor stub
};
template<class T>
Base<T>::~Base() {
// TODO Auto-generated destructor stub
};
}
Run Code Online (Sandbox Code Playgroud)
Derived.hpp
namespace test {
class Derived : public Base<int> {
public:
Derived();
virtual ~Derived();
};
} /* namespace aeirtuaccess */
Run Code Online (Sandbox Code Playgroud)
Derived.cpp
#include "Derived.hpp"
namespace test {
Derived::Derived() {
// TODO Auto-generated constructor stub
};
Derived::~Derived() {
// TODO Auto-generated destructor stub
};
}
Run Code Online (Sandbox Code Playgroud)
当我用Coliru编译这个代码时- 看到它在这里运行,它工作正常,但是当我使用g ++进入我的Ubuntu环境时,我遇到以下错误:
>g++ Base.cpp Derived.cppIn file included from Derived.cpp:2:0:
Derived.hpp:3:28: error: expected template-name before ‘<’ token
class Derived : public Base<int> {
^
Derived.hpp:3:28: error: expected ‘{’ before ‘<’ token
Derived.hpp:3:28: error: expected unqualified-id before ‘<’ token
Derived.cpp:6:18: error: invalid use of incomplete type ‘class test::Derived’
Derived::Derived() {
^
In file included from Derived.cpp:2:0:
Derived.hpp:3:7: error: forward declaration of ‘class test::Derived’
class Derived : public Base<int> {
^
Derived.cpp:11:19: error: invalid use of incomplete type ‘class test::Derived’
Derived::~Derived() {
^
In file included from Derived.cpp:2:0:
Derived.hpp:3:7: error: forward declaration of ‘class test::Derived’
class Derived : public Base<int> {
Run Code Online (Sandbox Code Playgroud)
编译器之间有什么区别吗?我应该使用特定的g ++标志或版本吗?在我的Ubuntu环境中,我还需要做些什么来解决这个问题吗?
在Derived.hpp,您需要添加:
#include "Base.hpp"
Run Code Online (Sandbox Code Playgroud)
在顶部.否则,编译器Base在编译此文件时不知道引用的内容.