-1

我有 1 个带有 main() 的 cpp 文件。它依赖于另一个(比如 header.hpp)中的结构和函数。结构与函数原型一起在 header.hpp 中定义。这些功能在 header.cpp 中实现。

当我尝试编译时,我收到一条错误消息:

undefined reference to `see_blah(my_thing *)`

所以给出一个概述:

标头.hpp:

#ifndef HEADERDUR_HPP
#define HEADERDUR_HPP
struct my_thing{
    int blah;
};
int see_blah(my_thing*);
#endif

标头.cpp:

#include "header.hpp"
int see_blah(my_thing * thingy){
    // ...
}

主.cpp:

#include <iostream>
#include "header.hpp"
using namespace std;
int main(void)
{
    thinger.blah = 123;
    cout << see_blah(&thinger) << endl;
    return 0;
}

我不知道自己做错了什么,也找不到任何答案。感谢您的任何回答,非常感谢他们!

4

6 回答 6

4

您应该知道在结构定义的末尾缺少分号。这意味着它将两个(据说是分开的)部分折叠在一起,因此您没有得到函数原型。

以下编译良好(在修复了几个其他错误之后):

// main.cpp
#include <iostream>
#include "header.hpp"
using namespace std;            // <- not best practice, but irrelevant here :-)
int main(void)
{
    my_thing thinger;           // <- need this!
    thinger.blah = 123;
    cout << see_blah(&thinger) << endl;
    return 0;
}

// header.cpp
#include "header.hpp"
int see_blah(my_thing * thingy){
    // ...
}

// header.hpp
#ifndef HEADERDUR_HPP
#define HEADERDUR_HPP 
struct my_thing{
    int blah;
};                              // <- see here.
int see_blah(my_thing*);
#endif

和:

g++ -o progname main.cpp header.cpp

gcc实际上,您发布的代码出错了,所以我不确定您的编译器为什么没有。上面的命令行也很重要——如果您要一步编译和链接,则需要提供所有必需的 C++ 源文件(否则链接器将无法访问所有内容)。

于 2011-02-07T07:59:34.320 回答
2

你需要:

#include "header.hpp"

在您的 * main.cpp文件中。

于 2011-02-07T07:49:39.613 回答
2

你的代码很好。你只是编译错了。尝试:

g++ main.cpp header.cpp
于 2011-02-07T07:59:31.220 回答
1

如果你已经包含了 header.hpp,那么你可能没有将它(header.cpp)链接到 main.cpp。您使用的是什么环境(g++ 或 VC++)?

编辑:对于 g++ 中的链接,您必须编写:

g++ main.cpp header.cpp -o program

此外,您的结构末尾缺少分号!

于 2011-02-07T07:55:09.377 回答
0

您在结构定义的末尾缺少一个分号,并将其与方法混合。

于 2011-02-07T08:00:37.287 回答
0

thinger.blah = 123;应遵循以下原则:

my_thing thinger = { 123 };

除了其他海报提到的问题。请更新您的示例以便编译。

于 2011-02-07T08:00:57.560 回答