这是我学习的一个简单的小程序:
这是声明标题:
#ifndef MATH_H
#define MATH_H
class Math
{
private:
int result;
public:
int addNumbers (int , int);
};
#endif // MATH_H
这是类定义:
#include <iostream>
#include "Math.h"
using namespace std;
int Math::addNumbers(int a , int b)
{
result = a + b ;
cout<<result<<endl;
};
这一个是该死的主要;)
#include <iostream>
#include "Math.h"
using namespace std;
int main()
{
Math myMath;
myMath.addNumbers(2,9);
};
最后我收到了这个错误:
undefined reference to `Math::addNumbers(int, int)
我应该告诉你:
头文件的名称与我的类名相同,
问题出在哪里?
最好的问候。Amin khormaei
所以正确的主要应该如下所示:
#include <iostream>
#include "Math.h"
#include "MathDefinition.cpp"
using namespace std;
int main()
{
Math myMath;
myMath.addNumbers(2,9);
};
答案 0 :(得分:0)
问题是您尝试构建的程序缺少Math::addNumbers
的定义。这可能是因为您只是尝试构建主源文件
您需要进行此操作,以便定义Math::addNumbers
的代码最终链接到您的程序中。为此,您有两个主要选项(假设您的文件名为main.cpp和math.cpp):
您可以修改构建系统以编译math.cpp。这通常被认为是处理这种情况的正确方法。不幸的是,细节取决于您的构建系统或IDE ...
例如,如果您正在使用gcc,则可以使用以下构建命令将这两个文件链接到二进制文件中:
gcc -o myprogram main.cpp math.cpp
您可以在main.cpp中简单地#include "math.cpp"
。这将导致math.cpp的代码在预处理后实际上成为main.cpp的一部分。这通常不是推荐的做法,但与“适当的”解决方案相比,环境特定性较低
答案 1 :(得分:0)
您可能无法正确编译代码。用以下内容编译:
gcc main.cpp math.cpp -o math.o
或更短:
gcc *.cpp -o math.o
这将编译math.cpp和main.cpp文件