我有一个带有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;
}
我不知道我做错了什么,我找不到任何答案。感谢您的回答,非常感谢!
答案 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 };
除了其他海报提到的问题。请更新您的示例,以便进行编译。