我不熟悉在linux下使用c ++,所以我遇到了一些问题,其中之一就是在我编写一个类并尝试实例化该类的对象后,我得到了以下错误:“undefined reference to Constructor_of_that_class” 。对于我编写的每个类都会发生这种情况,无论我在哪里尝试进行实例化,都会发生这种情况,即使代码编译没有任何问题。这里出了什么问题以及我必须做些什么才能克服这个错误?因为我工作的项目不是由我创建的,所以我怀疑它必须对某些设置做些什么,但我不知道哪个。
编辑(粘贴自评论):
好吧,如果我定义一个类:
class test {
public:
int a*;
test( int* a)
}
class test {
test::test( int* a)
{
this->a=a;
}
}
然后在我之前定义的任何类别的人中使用:
test t =new test( anIntPointer);
然后我得到一个未定义的引用test::test(int*)
;
答案 0 :(得分:3)
如果您的代码示例甚至编译,我会感到惊讶,因此首先修复所有其他编译错误将是一个良好的开端。这是一个可能有用的简短代码示例:
// Class declaration
class test
{
private:
// Member variable - should be private.
int* a;
public:
// Constructor declaration.
test(int* a);
// Inline function definition.
int getA()
{
return *a;
}
};
// Constructor declaration.
test::test( int* a)
{
this->a=a;
}
int main()
{
int i = 7;
test t(&i);
i++;
// Should return 8.
return t.getA();
}
答案 1 :(得分:1)
没有代码就无法分辨,但要确保你的类定义以分号结尾;
这样做:
<强> test.h 强>
class Test {
public:
int a*;
Test( int *a );
}; //Missing this semi colon might be your problem
<强> TEST.CPP 强>
#include "test.h"
Test::Test( int *a )
{
this->a = a;
}
int main()
{
int *anIntPointer;
Test t = new Test( anIntPointer );
return 0;
}
答案 2 :(得分:1)
不要将构造函数定义(test::test()
函数)包装在class test
块中。这有效地定义了一个具有相同名称的新类,但它与标题中的类不同。看起来像这样:
// .h file
class test {
public:
int *a;
test( int* a)
};
// .cpp file
test::test( int* a)
{
this->a=a;
}
答案 3 :(得分:0)
如果你想要一个更好的答案,你应该提供你的一个类(定义+实现)的一些代码。
通过您提供的最小解释,我认为您的构造函数没有实现。
答案 4 :(得分:0)
试试这个:
<强> foo.h中强>
class test {
public:
int a*;
test( int* a)
};
<强> Foo.cpp中强>
test::test( int* a)
{
this->a=a;
}
答案 5 :(得分:0)
除了我上面的评论(我对整个血糖有点低)之外的语义,你声明你实例化test
因此:
test t =new test( anIntPointer);
new
运算符将指针返回给对象,而不是对象本身 - 您应该实例化它:
test *t = new test(anIntPointer);
(并且,回到语义,C ++类的约定是大写的第一个字母,我相信:-))
答案 6 :(得分:0)
您发布的类定义在语法上无效。正确的等价物是:
class test {
public:
int *a;
test (int *a) : a(a) {}
};
这会编译吗?