C ++实现和头文件链接

时间:2014-01-16 00:30:52

标签: c++

我很确定这可能是一件简单的事情,因为我已经关注了其他人已经在这个网站上做过的事情,但无论我如何设置我的文件和#includes,我都会不断收到链接错误。很奇怪,这里的任何人都是我的代码。

这三个文件不能用g ++ main.cpp Fraction.cpp编译。

我收到此错误:

Undefined symbols for architecture x86_64:
  "Fraction::simplify(int, int)", referenced from:
      _main in w2-TsJ6zT.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

这是我的main.cpp

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

int main() {
     Fraction fraction;
     int num, den;
     fraction.simplify(num, den);
}

这是我的Fraction.h

class Fraction{

private:

//Variables
    int numerator;
    int denominator;
public:

//Methods

void simplify(int numerator, int denominator);
};

最后是我的Fraction.cpp文件。

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

void simplify(int numerator, int denominator){

//definition here

}

感谢任何帮助和信息。谢谢!

1 个答案:

答案 0 :(得分:4)

void simplify(int numerator, int denominator){

//definition here

}

应该是

void Fraction::simplify(int numerator, int denominator){

//definition here

}

您定义它的方式,simplify是全局范围内的简单函数,而第二个变体实现先前在simplify中声明的Fraction的成员函数Fraction.h。链接错误告诉您从未实现此方法(因为您实际实现了具有相同名称的新函数)。