объект — неопределенная ссылка на функцию-член (C ++)

Я использую 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

Вот части проекта, связанные с ошибкой (для ясности):
Мой make-файл:

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 ++!

0

Решение

попробуйте это, пожалуйста, 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,

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]