我的构建配置有问题。我收到'LNK2019'错误:
main.obj:-1:错误:LNK2019:未解析的外部符号“公共:__cdecl参考:: Item :: Item(void)”(?? 0Item @ Object @@ QEAA @ XZ)在函数main中引用>
我的项目的文件系统结构如下(World.pro):
SOURCES += \
main.cpp \
Window.cpp \
Item.cpp \
Object/Item.cpp \
Reference/Item.cpp
HEADERS += \
Window.h \
Item.h \
Object/Item.h \
Reference/Item.h
我知道问题出在哪里。当前,编译器将输出文件保存在一个主目录中,因此将有3个同名文件(当前已被覆盖?),这就是链接器找不到正确文件的原因。 如何要求编译器将* .obj保存在适当的子目录“对象”,“引用”中,并通知链接器在哪里搜索此文件?
我不希望将单独的项目与子项目(库)分开。我对当前的文件系统结构感到满意。同样,命名转换对我来说是完美的,我喜欢用Object::Item
和Reference::Item
来引用类型。
答案 0 :(得分:0)
不确定您可以调整qmake生成系统,因为在此处阅读文档http://doc.qt.io/qt-5/qmake-variable-reference.html#objects-dir时,似乎没有可能为每个源目录定义特定的文件夹。
对我来说,在同一个项目中使用相同名称的文件是一种不好的做法。这只会导致混乱。
我好像您在混淆文件名和名称空间:
您可以很好地使用不同的文件名(Reference / ReferenceItem.h)获得相同的结果,因为您在C ++中命名类的方式与文件名无关,这只是一个约定(将Foobar类放在一个文件Foobar.h / .cpp)
=>如果两个类不在相同的名称空间中,则可以使用两个相同的名称。文件名对此没有影响。
Reference / ReferenceItem.h文件
namespace reference {
class Item {
//implementation here...
}
}
Object / ObjectItem.h
namespace object {
class Item {
//implementation here...
}
}