C++项目设置,多个定义
C++ project setup, multiple definitions
我正在进行我的第一个大型C++项目,在正确构建它方面遇到了巨大的问题。
首先,错误:
/tmp/ccn7hjru.o: In function `match(std::basic_istream<char, std::char_traits<char> >&, char const*)':
Geometry.cpp:(.text+0x0): multiple definition of `match(std::basic_istream<char, std::char_traits<char> >&, char const*)'
/tmp/ccfuS3Jb.o:Camera.cpp:(.text+0x0): first defined here
/tmp/ccn7hjru.o: In function `eat(std::basic_istream<char, std::char_traits<char> >&)':
Geometry.cpp:(.text+0xda): multiple definition of `eat(std::basic_istream<char, std::char_traits<char> >&)'
/tmp/ccfuS3Jb.o:Camera.cpp:(.text+0xda): first defined here
/tmp/ccIOhdcQ.o: In function `match(std::basic_istream<char, std::char_traits<char> >&, char const*)':
Light.cpp:(.text+0x0): multiple definition of `match(std::basic_istream<char, std::char_traits<char> >&, char const*)'
/tmp/ccfuS3Jb.o:Camera.cpp:(.text+0x0): first defined here
/tmp/ccIOhdcQ.o: In function `eat(std::basic_istream<char, std::char_traits<char> >&)':
Light.cpp:(.text+0xda): multiple definition of `eat(std::basic_istream<char, std::char_traits<char> >&)'
/tmp/ccfuS3Jb.o:Camera.cpp:(.text+0xda): first defined here
....
这种情况持续了数百行
我所有的c++课程文件都是这样的:
#include "Camera.h"
#include "util.h"
Camera::Camera() {
// TODO Auto-generated constructor stub
}
Camera::Camera(int x, int y) {
this->resX = x;
this->resY = y;
}
Camera::~Camera() {
// TODO Auto-generated destructor stub
}
...more class methods below...
头文件都是这样的:
#ifndef CAMERA_H_
#define CAMERA_H_
#include "SceneElement.h"
#include "P3D.h"
#include "Ray.h"
#define CAMERA_PRE "{CAM:"
#define CAMERA_POST ":CAM}"
#define TAG_LOCATION "LOC:"
#define TAG_PLANE "PLANE:"
#define TAG_UPPER_RIGHT "UR:"
#define TAG_UPPER_LEFT "UL:"
#define TAG_LOWER_RIGHT "LR:"
#define TAG_LOWER_LEFT "LL:"
#define TAG_RES_X "RESX:"
#define TAG_RES_Y "RESY:"
class Camera: public SceneElement {
public:
P3D location;
P3D upperLeft;
P3D upperRight;
P3D lowerLeft;
P3D lowerRight;
int resX, resY;
Camera();
Camera(int, int);
virtual ~Camera();
virtual void toStream(std::ostream &);
virtual void fromStream(std::istream &);
Ray getRay(int, int);
};
#endif /* CAMERA_H_ */
一个例外是util文件,它看起来像这样:
#include "util.h"
#include <iostream>
#include <stdlib.h>
#include <string.h>
void match(std::istream &str, const char* expected){
int len = strlen(expected);
char* fromStream = (char*)malloc(len+1);
str.read(fromStream, len);
fromStream[len] = 0;
if(strcmp(fromStream, expected)){
std::cout << "expected " << expected << ", got " << fromStream << "n";
free(fromStream);
exit(1);
}
free(fromStream);
}
void eat(std::istream &str){
char c;
while(c=str.peek(), c == ' ' || c == 'n' || c == 't'){
str.get();
}
}
头文件如下:
#ifndef UTILS
#define UTILS
#include <iostream>
void match(std::istream &str, const char* expected);
void eat(std::istream &str);
#endif
查看SceneElement.h
、P3D.h
和Ray.h
。很可能,您已经在其中一个头文件中包含了util.cpp
。
另一种可能性可以是头文件之一中的match()
和eat()
的定义。
相关文章:
- 我的项目不会像"undefined reference to `grpc::g_core_codegen_interface'"那样使用未定义的引用错误进行编译
- 在 Mac 上使用 CMAKE 将 FFTW 和 FFTWPP 链接到项目中时未定义的符号
- MacOS 上的 Xcode 11 项目不在一个函数中使用 sin 和 cos:未定义的符号"___sincosf_stret"
- 令人困惑的定义指令在C ++项目中
- 自定义 QML QQuick彩绘项目成员锚点未在 qml 中设置为父级
- 自定义构建文件更改不会触发VS 2017中的项目重建
- 为Qt项目树中的所有项目定义全局宏
- 我不断收到对项目"xxx"的错误未定义引用
- 是否可以在相同的命名空间中,但在不同的嵌套项目中定义具有相同名称的类
- C++ priority_queue与自定义比较器并删除任何项目
- 如何解决:自定义QGraphics项目接收鼠标新闻事件坐标延迟/滞后?
- 我可以在将项目编译为静态库(未定义的引用)时在代码中使用 QImage 吗?
- 优点和缺点 在类内为大型项目定义的内联朋友助手免费函数
- 当我调整自定义项目时,如何在自定义Qgraphictem中的场景中隐藏子项目
- Qt:模型/视图-定义项目持有日期的格式
- 如何在我自己的自定义项目中使用 INET 或 Mixim 的模块
- 将目录添加到Xcode自定义项目模板会产生奇怪的递归
- QListWidget性能与许多自定义项目
- Qt旋转/移动自定义项目相对于鼠标
- 在Visual Studio中链接PostgreSQL自定义C++项目时出错