我正在制作一个计划:
#include <iostream>
#include <vector>
#include <utility> //std::pair, std::make_pair
using namespace std;
class User {
private:
size_t userIndex;
vector< pair<int,int> > ratings;
public:
void addRating(int movieIndex, int rating) {
ratings.push_back( make_pair(movieIndex, rating) );
}
};
但是,当我使用g ++编译它时,我收到以下错误:
/usr/lib/gcc/x86_64-pc-cygwin/4.8.2/../../../../lib/libcygwin.a(libcmain.o): In function `main':
/usr/src/debug/cygwin-1.7.28-1/winsup/cygwin/lib/libcmain.c:39: undefined reference to `WinMain'
/usr/src/debug/cygwin-1.7.28-1/winsup/cygwin/lib/libcmain.c:39:(.text.startup+0x7e): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `WinMain'
collect2: error: ld returned 1 exit status
有趣的是,当我注释掉以下行时,这个错误消失了:
//vector< pair<int,int> > ratings;
为什么在取消注释此行时会发生这种情况?
答案 0 :(得分:0)
完整的给定代码可以使用以下命令进行编译:
g++ -c user.cpp
链接器指示的问题是,您要告诉g ++创建可执行文件,而不是库文件,但是未指定主要功能:
g++ user.cpp
给出您提到的WinMain丢失(在Windows下)的错误。
这与您要评论的行完全无关。但是,可能真正的问题出在Makefile内部。尝试touch
替换代码文件,看看是否也导致了问题。如果您的Makefile说要重新编译cpp文件,但没有正确使用-c
标志,您将得到这种行为。例如,尝试从下面的Makefile中删除-c
标志:
%.o: %.cpp %.h
g++ -c %.cpp