在另一个cpp文件中使用函数的问题

时间:2011-02-07 07:47:35

标签: c++ header undefined-reference

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

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

undefined reference to `see_blah(my_thing *)`

所以要概述:

header.hpp:

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

header.cpp:

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

main.cpp中:

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

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

6 个答案:

答案 0 :(得分: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 ++源文件(否则链接器将无法访问所有内容)。

答案 1 :(得分:2)

你需要:

#include "header.hpp"

在您的* main.cpp 文件中。

答案 2 :(得分:2)

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

g++ main.cpp header.cpp

答案 3 :(得分:1)

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

编辑:要用g ++进行链接,你必须写:

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

你的结构中还缺少分号!

答案 4 :(得分:0)

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

答案 5 :(得分:0)

thinger.blah = 123;应该符合以下几行:

my_thing thinger = { 123 };

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