当尝试使用名为normalize的.h文件编译一个名为rat的.cpp文件时,该文件位于不同的文件夹中(rat.h与rat.cpp位于同一文件夹中),我正在打字
g++ -I/opt/cis/include/ -I/opt/cis/lib/ rat.cpp
我在.cpp文件本身中包含了一个int main(),并且已经完全注释掉.h文件和.cpp文件的内部工作方式,只是为了尝试正确编译。
.h文件(未包括评论项目)
1 #ifndef RAT_H
2 #define RAT_H
3 #include <iostream>
4 #include <string>
5
6 class Rat {
7 friend std::ostream &operator<<(std::ostream &, const Rat &);
8 friend std::istream &operator>>(std::istream &, Rat &);
9 private:
10 double n,d;
11 public:
12 Rat(): n(0), d(1) {}
13 };
14. #endif
.cpp文件
1 #include <iostream>
2 #include <cstdlib>
3 #include <string>
4 #include <sstream>
5 #include "rat.h"
6 #include "normalize.h"
7 using namespace std;
8 #ifdef TEST_RAT
9 int main() {};
10 #endif
我做错了什么?对不起,如果很明显。
答案 0 :(得分:3)
只有定义了宏main
,才会存在TEST_RAT
函数。之一:
-DTEST_RAT
添加到您的编译器CFLAGS #define TEST_RAT
#ifdef
#ifdef TEST_RAT
和#endif
对
答案 1 :(得分:0)
#define TEST_RAT
这未在您的代码中定义,因此现在应该可以使用。
答案 2 :(得分:0)
由于您将main()
放在#ifdef
中,如果未定义TEST_RAT
,则会将其遗漏。因为它不是你没有main
所以你不能创建一个可执行文件(没有入口点),g++
失败并看到错误。
答案 3 :(得分:0)
很可能你想把它放在你的主要部分(以确保定义了Rat类):
#ifdef RAT_H
int main() {};
#endif
答案 4 :(得分:0)
另一个选择,因为还没有人提到它,是-c
标志:
g++ -c -I/opt/cis/include/ -I/opt/cis/lib/ rat.cpp
这会将rat.cpp编译为目标文件rat.o,而不会尝试将其链接到程序中(因此需要main
)。
如果您要测试正确性,可能还需要-W
或-Wall
进行警告。