【问题标题】:build error when separating c++ code [duplicate]分离c ++代码时生成错误[重复]
【发布时间】:2014-05-22 18:13:15
【问题描述】:

我最近做了一个小例子,以练习使用Geany 分离.h.cpp 文件中的C++ 代码。代码编译没有问题,但是在我构建时出现以下错误:

g++ -std=c++11 -Wall -o "parent1" "parent1.cpp" (in directory: C:\Program Files (x86)\Geany)
C:\Users\Sabine\AppData\Local\Temp\ccnonGdW.o:parent1.cpp:(.text+0x15): undefined reference to `grandparent::grandparent(int)'
c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/lib/libmingw32.a(main.o): In function `main':
i:\p\giaw\src\pkg\mingwrt-4.0.2-1-mingw32-src\bld/../mingwrt-4.0.2-1-mingw32-src/src/libcrt/crt/main.c:91: undefined reference to `WinMain@16'
collect2.exe: error: ld returned 1 exit status
Compilation failed.

源文件:

parent1.h:

#ifndef PARENT1_H
#define PARENT1_H

#include "grandparent.h"

class parent1 :public grandparent
{   private:
       int i ;
    public:
       parent1(int p1a, int p1b, int p1c);
};

#endif

parent1.cpp:

 #include "parent1.h"
    #include "grandparent.h"
    #include <iostream>
    #include <string>
    using namespace std;

    parent1::parent1(int a, int b, int c)
    : grandparent(a)
    {}

您好,感谢您的快速回复。

在 parent1.cpp 中删除这一行 #include "grandparent.h" --- 这不起作用。 (错误:{-token 之前的预期类名)

grandparent.h 如下所示:

#ifndef GRANDPARENT_H
#define GRANDPARENT_H
class grandparent
{   private:
        int gx; 
    public: 
        grandparent(int gx);    
};
#endif

【问题讨论】:

  • 删除这一行 #include "grandparent.h" in parent1.cpp
  • 显示grandparent.h的内容
  • 另外,写using namespace std; 被认为是不好的做法,原因如下:stackoverflow.com/questions/1452721/…
  • @Khnle - 删除 cpp 中的包含有什么帮助?预处理器守卫可以防止它成为问题。
  • @ssell 如果是这种情况,编译将失败 - OP 表示编译成功但“构建”(可能是链接)失败。

标签: c++ mingw build-error code-separation


【解决方案1】:

您需要链接祖父母对象 - grandparent.o 或它所属的库。

更新:特别是您需要(假设您已经编译了 grandparent.cpp):

g++ -std=c++11 -Wall -o "parent1" "parent1.cpp" "grandparent.o"

我相信

   g++ -std=c++11 -Wall -o "parent1" "parent1.cpp" "grandparent.cpp"

也可以。

【讨论】:

  • 显示的错误是编译时错误。 OP 甚至还没有进入链接阶段
  • 不正确。 'ld 返回 1 个退出状态'。 ld 是链接器。当输出未指定为 *.o.时,g++ 将自动编译和链接。
  • 我的错 :) ,我专注于grandparent::grandparent(int)
  • 如何将其链接到 grandparent.o ?
  • @user3443063 - 请参阅上面的编辑回答。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-27
  • 2018-12-21
相关资源
最近更新 更多