我正在尝试将多个类编译到他们自己的二进制文件中,以便稍后在链接期间使用。我有以下文件:
Gradebook.h
#ifndef GRADEBOOK_H
#define GRADEBOOK_H
class Gradebook {
public:
Gradebook(double);
Gradebook();
void setGrade(double);
double getGrade();
private:
double currentGrade;
};
#endif
Gradebook.cpp
#include "Gradebook.h"
Gradebook::setGrade(double grade){
currentGrade = grade;
}
Gradebook::getGrade(){
return currentGrade;
}
Gradebook::Gradebook(double grade){
currentGrade = grade;
}
Gradebook::Gradebook(){}
当我尝试编译时:
$ g++ -c Gradebook.cpp
我收到以下错误:
Gradebook.cpp:2:12: error: C++ requires a type specifier for all declarations
Gradebook::setGrade(double grade){
~~~~~~~~~ ^
Gradebook.cpp:3:3: error: use of undeclared identifier 'currentGrade'
currentGrade = grade;
^
Gradebook.cpp:6:12: error: C++ requires a type specifier for all declarations
Gradebook::getGrade(){
~~~~~~~~~ ^
Gradebook.cpp:7:10: error: use of undeclared identifier 'currentGrade'
return currentGrade;
有人可以告诉我我做错了什么吗?感谢
更新:
现在我已经编译了,因为我在cpp文件中指定了返回类型但是,当我尝试将所有内容链接在一起时,我会收到更多错误。我使用以下makefile:
all : main.o Gradebook.o
g++ main.o Gradebook.o -o build
main.o: main.cpp
g++ -c main.cpp
Gradebook.o: Gradebook.cpp
g++ -c Gradebook.h
clean:
rm -rf *.o build
run:
./build
当我运行make时出现以下错误:
ld: warning: ignoring file Gradebook.o, file was built for unsupported file format ( 0x43 0x50 0x43 0x48 0x01 0x0C 0x00 0x00 0x27 0x08 0x00 0x00 0x0B 0x02 0x68 0x42 ) which is not the architecture being linked (x86_64): Gradebook.o
Undefined symbols for architecture x86_64:
"Gradebook::getGrade()", referenced from:
_main in main.o
"Gradebook::setGrade(double)", referenced from:
_main in main.o
"Gradebook::Gradebook(double)", referenced from:
_main in main.o
"Gradebook::Gradebook()", referenced from:
_main in main.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
答案 0 :(得分:4)
您必须指定方法的返回类型。
void Gradebook::setGrade(double grade){
currentGrade = grade;
}
double Gradebook::getGrade(){
return currentGrade;
}
GradeBook.o的make规则错误,您正在编译.h文件。试试这个:
Gradebook.o: Gradebook.cpp
g++ -c Gradebook.cpp
答案 1 :(得分:1)
您的makefile中的某个构建配方存在问题:
Gradebook.o : Gradebook.cpp
g++ -c Gradebook.h
在构建翻译单元时,您要编译.cpp
文件,而不是将头文件编译为独立文件。当前的设置将不包括您的类的方法实现,因为永远不会编译gradebook.cpp
。
请改为尝试:
Gradebook.o : Gradebook.cpp
g++ -c $^ -o $@