我开发了一个库,当我使用GCC编译我的代码时(在带有CodeBlocks的Windows中),源代码无法编译并出现此错误:
错误:嵌套名称说明符中使用的类型'claculator'不完整。
我编写了一个完全生成此错误的示例代码:
class claculator;
template<class T>
class my_class
{
public:
void test()
{
// GCC error: incomplete type 'claculator' used in nested name specifier
int x = claculator::add(1, 2);
}
T m_t;
};
// This class SHOULD after my_class.
// I can not move this class to top of my_class.
class claculator
{
public:
static int add(int a, int b)
{
return a+b;
}
};
int main()
{
my_class<int> c;
c.test();
return 0;
}
如何解决此错误?
请注意我的源代码在Visual Studio中成功编译。
感谢。
答案 0 :(得分:7)
非常简单。在test()
类定义为之后定义calculator
:
class calculator;
template<class T>
class my_class
{
public:
void test(); //Define it after the definition of `calculator`
T m_t;
};
// This class SHOULD after my_class.
// I can not move this class to top of my_class.
class calculator
{
public:
static int add(int a, int b)
{
return a+b;
}
};
//Define it here!
template<class T>
void my_class<T>::test()
{
int x = calculator::add(1, 2);
}
通过这种方式,calculator
的完整定义在解析test()
的定义时为编译器所知。