对成员函数的未定义引用(C ++)

时间:2012-12-02 01:39:34

标签: c++ object initialization undefined-reference

我正在使用Makefile来编译C ++项目,并且我收到一个未定义的引用错误,我怀疑这是一个简单的错误。

错误本身是:

$ make
g++ -c main.cpp
g++ -o p5 main.o
main.o:main.cpp:(.text+0x241): undefined reference to `Instructions::processInput(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)'
collect2: ld returned 1 exit status
Makefile:2: recipe for target `p5' failed
make: *** [p5] Error 1

以下是与错误有关的项目部分(为清楚起见): 我的makefile:

p5: main.o Instructions.o
    g++ -o p5 main.o

main.o: main.cpp Instructions.h
    g++ -c main.cpp

Instructions.o: Instructions.h Instructions.cpp
    g++ -c Instructions.cpp

我的main.cpp文件:

#include <string>
#include "Instructions.h"
using namespace std;

int main() {
    Instructions inst;
    inst.processInput("some string par example"); //THIS LINE HERE GIVES ME ERRORS
    return 0;
}

我的说明标题文件:

#ifndef INSTRUCTIONS_H
#define INSTRUCTIONS_H
#include <string>

class Instructions {
public:
    Instructions() {input = ""; command = 0; xCoord = 0.0; yCoord = 0.0;};
    void processInput(std::string in);
private:
    std::string input;
    int command;
    double xCoord;
    double yCoord;
};
#endif

最后是.cpp文件,目前非常准确:

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

void Instructions::processInput(string in) {
    cout << "Processing: " << input << endl;
}

我一直在寻找解决方案,但无济于事。如果它确实在其他地方,请原谅我!我也希望它能帮助那些仍然与C ++达成协议的初学者!

1 个答案:

答案 0 :(得分:2)

试试这个请Makefile:

 p5: Instructions.o main.o
     g++ Instructions.o main.o -o p5 

 Instructions.o: Instructions.cpp
     g++ -c Instructions.cpp -o Instructions.o 

 main.o: main.cpp Instructions.h
     g++ -c main.cpp Instructions.o -o main.o

要编译p5,首先需要编译所有依赖项Instructions.omain.oInstructions.o是独立的,因此可以像g++ -c Instructions.cpp一样进行编译。但main.o依赖于指令类,因此它依赖于.o它应该像g++ -c main.cpp Instructions.o一样进行编译。

p5也是如此,它需要所有*.o