未定义参考

时间:2010-03-23 19:36:25

标签: c++

我不熟悉在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*);

7 个答案:

答案 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) {}
};

这会编译吗?