嘿伙计们我前几天问过一些我无法解决的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中使用多个文件时,这可能是我的电脑出了问题吗?
答案 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;包含标题的文件夹的路径。每行一个文件夹。
只需将当前文件夹或头文件的位置添加到路径中即可。
答案 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