2014-06-17 55 views
0

嘿家伙我有一天问了一些关于我无法工作的C++代码的问题。我采取了每个人的建议,如何在C++中创建对象,但现在我得到未定义的参考错误。我正在使用最新的代码块版本并使用它进行编译。我已经读过这是由于在编译过程中没有链接某些文件造成的,这意味着我已经在头文件中定义了该类,但没有在代码中定义该类,这使我感到困惑,因为从我的理解(例如教授示例)我宣称对象。Codeblocks 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中使用多个文件时,这可能是我的电脑有问题吗?

+1

加上'MathObject.cpp'你正在编译 –

+0

你是如何构建这个项目中的文件?从命令行? –

+0

@DrewDormann与codeblocks IDE内置编译器 –

回答

5

在代码块的“项目”选项卡,右键单击项目的名称,并选择“添加文件...”

或者,你可以从“项目”,选择“添加文件...”在应用程序的主菜单中。

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

当前MathObject.cpp从该列表中丢失,所以它没有得到编译或链接。

+0

奇怪的是,单击“项目”下的“添加文件”不起作用。系统或ide不会挂起,就好像没有为该选择设置操作。 –

+0

@MichaelMiner见我的编辑。 –

+0

确保您已选择_Project> Properties> Build targets> ** Build target files ** _下的所有必需文件 – Ganapathy

-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 
+0

使用你的,我仍然得到未引用的错误,它可以是我的编译器或IDE? –

+1

这不回答问题。 OP在他的编译器上明显遇到与你不同的东西,只是断言它“对你有用”并不有助于这种情况。 – 0x499602D2

+0

我忘了我怎么编译它: g ++ MathObject.cpp main.cpp -o main.exe –

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

试过,这个。我做了一个cd到文件夹中的所有文件,并输入你的行完全一样,我被告知,g ++不是一个公认的命令 –

+0

@MichaelMiner将'MinGW/bin'文件夹的路径添加到'PATH'环境变量。 – 0x499602D2

+0

你的平台\操作系统是什么?这只是您需要包含MathObject.cpp文件进行编译的示例。我从Linux上运行它,它默认有g ++编译器。 –

0

发现从代码::块版面的解决方案:

- 项目 - >“编译选项

- 确保正确的目标是在左侧突出显示;如果你不知道选择一个项目。

- 选择选项卡 “搜索目录”

- 选择子标签 “编译”

- “添加” 的路径包含标题的文件夹。每行一个文件夹。

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

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