Codeblocks c ++ undefined引用错误,定义了类

时间:2014-06-17 00:10:18

标签: c++ codeblocks linker-errors undefined-reference

嘿伙计们我前几天问过一些我无法解决的c ++代码问题。我接受了每个人关于如何用c ++创建对象的建议,但现在我得到了未定义的引用错误。我正在使用最新的代码块版本并使用它来编译。我已经读过这是因为在编译过程中没有链接某些文件,这意味着我已经在头文件中定义了类但没有在代码中定义,这让我感到困惑,因为从我的理解(教授示例)我宣布对象。

头文件 MathObject.h

class MathObject{
private:
    int num1;
    int num2;

public:
    int sum();
    MathObject(int n, int m);
};

MathObject文件 MathObject.cpp

#include <iostream>
#include "MathObject.h"
using namespace std;

MathObject :: MathObject(int n, int m){
    num1 = n;
    num2 = m;
}

int MathObject :: sum(){
    return num1+num2;
}

主文件

#include <iostream>
#include "MathObject.h"
using namespace std;

int main(int args, char *argv[]){
    MathObject *mo = new MathObject(3,4);
    int sum = mo -> sum();

    MathObject mo2(3,4);

    //cout << sum << endl;
    return 0;
}

未定义的引用是对MathObject类中任何内容的所有调用,我一直在搜索一个我能理解的小c ++示例。 (语法与java不同)

这种情况曾经发生在我尝试在c中使用多个文件时,这可能是我的电脑出了问题吗?

6 个答案:

答案 0 :(得分:6)

在&#34; Projects&#34;在代码块中选项卡,右键单击项目的名称,然后选择&#34;添加文件...&#34;

或者,您可以选择&#34;添加文件...&#34;来自&#34;项目&#34;在应用程序的主菜单中。

使用此选项可将所有源文件添加到项目中。

目前该列表中缺少MathObject.cpp,因此未进行编译或链接。

答案 1 :(得分:0)

g++ MathObject.cpp main.cpp -o main

答案 2 :(得分:0)

从code :: blocks forum找到解决方案:

- 项目 - &gt; &#34;构建选项

- 确保左侧突出显示正确的目标;如果您不知道选择项目,请选择最重要的项目。

- 选择标签&#34;搜索目录&#34;

- 选择子标签&#34;编译器&#34;

- &#34;添加&#34;包含标题的文件夹的路径。每行一个文件夹。

只需将当前文件夹或头文件的位置添加到路径中即可。

链接:http://forums.codeblocks.org/index.php?topic=14713.0

答案 3 :(得分:0)

您只需在main.cpp中添加该类的.cpp文件即可。

#include <iostream>
#include "MathObject.h"
#include "MathObject.cpp"
using namespace std;

int main(int args, char *argv[]){
    MathObject *mo = new MathObject(3,4);
    int sum = mo -> sum();

    MathObject mo2(3,4);

    //cout << sum << endl;
    return 0;
}

答案 4 :(得分:0)

要修复未定义的参考错误:-

  • 设置->编译器...->构建选项 最后标记为“将当前正在编译的文件的目录显式添加到编译器搜索目录”

答案 5 :(得分:-3)

我试试这个并且工作正常!

的main.cpp

#include <iostream>
#include "MathObject.h"
using namespace std;

int main(int args, char *argv[]){
    MathObject *mo = new MathObject(3,4);
    int sum = mo->sum();

    MathObject mo2(3,4);
    int sum2 = mo2.sum();

    cout << sum << endl;
    cout << sum2 << endl;
    system("pause");
    return 0;
}

MathObject.h

class MathObject
{
private:
    int num1;
    int num2;
public:
    MathObject(void);
    ~MathObject(void);
    int sum();
    MathObject(int n, int m);
};

MathObject.cpp

#include "MathObject.h"

MathObject::MathObject(void)
{
}

MathObject::~MathObject(void)
{
}
int MathObject::sum(){
    return num1+num2;
}
MathObject::MathObject(int n, int m){
    num1 = n;
    num2 = m;
}

编译:

g++ MathObject.cpp main.cpp -o main.exe