0

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

エラーに関係するプロジェクトの部分を次に示します (わかりやすくするため): 私のメイクファイル:

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;
}

My Instructions ヘッダー ファイル:

#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++ に慣れようとしているすべての初心者に役立つことを願っています。

4

1 に答える 1

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.oありmain.oます。Instructions.oは独立しているので、このようにコンパイルできますg++ -c Instructions.cpp。しかしmain.o、クラスの命令に依存するので、そのクラスに依存します。.oこのようにコンパイルする必要がありますg++ -c main.cpp Instructions.o

についても同じでp5、すべての*.o.

于 2012-12-02T01:44:06.400 に答える