如何从多个c++文件构建二进制文件
How to build a binary from multiple c++ files?
我已经开始学习c++,并且在处理多个文件时卡住了。为了练习基本类,我编写了三个不同的文件,
- working.cpp
- word.cpp
- word.h
word.cpp:
#include <iostream>
#include "word.h"
using namespace std;
class word{
public:
char *word;
void createWord(char *str)
{
word = str;
}
void print_word(void)
{
cout<<word<<endl;
}
char * getWord()
{
return word;
}
}
working.cpp
#include <iostream>
#include "word.h"
void printWord(word);
using namespace std;
int main()
{
word one;
one.createWord("one");
printWord(one);
}
void printWord(word a)
{
cout<<a.getWord()<<endl;
}
word.h
class word;
这是三个不同的文件,所以我不确定如何编译它们。我试过的是g++ working.cpp word.cpp
但是,编译器不将word识别为类,并给出以下错误
working.cpp: In function 'int main()':
working.cpp:7:7: error: aggregate 'word one' has incomplete type and cannot be defined
working.cpp:7:12: error: aggregate 'word two' has incomplete type and cannot be defined
working.cpp:7:17: error: aggregate 'word three' has incomplete type and cannot be defined
working.cpp: In function 'void printWord(word)':
working.cpp:19:6: error: 'aha' has incomplete type
In file included from working.cpp:2:0:
word.h:2:7: error: forward declaration of 'class word'
word.cpp:25:1: error: expected ';' after class definition
我在编译时做错了什么?
-
您需要在头文件中包含更多
word
的定义。像这样:class word { public: char *word; void createWord(char *str); void print_word(void); char * getWord(); };
-
然后,将
word.cpp
更改为仅具有实现:void word::createWord(char *str) { word = str; } void word::print_word(void) { cout<<word<<endl; } char * word::getWord() { return word; }
-
编译并链接!
您需要在头文件中有更多的word
类,以便您的其他翻译单元可以知道该类有多大(为您正在创建的实例保留足够的空间)以及知道您想要调用的方法的名称。
仅仅在头文件中提到类名(所谓的前向声明)是不够的;您需要一个完整的类声明(它声明了类的所有字段和函数):
class word {
public:
char *word;
void createWord(char *str);
void print_word(void);
char * getWord();
};
在word.h
中没有实际的word
类声明
word.h:2:7: error: forward declaration of 'class word'
我建议你阅读Bjarne Stroustrup的杰出著作《c++编程语言》作为入门。
相关文章:
- 如何从构建 libgpio.so 的生成文件构建libgpio.a
- 为多个测试文件构建可执行文件
- 在QMAKE中编译之前,如何使用可执行文件构建多个标头文件
- 从同一文件构建基类和继承类
- cmake:如何迭代目录中的所有源文件并将每个文件构建到可执行文件中
- MEX文件构建具有八度的构建(包装纸问题)
- 通过解析文件构建逻辑语句
- C++ 如何从.dat文件构建字符串的 2D 矩阵?5 列 x 行
- 使用其他文件构建 gcc 插件
- 从文件构建有向图
- 仅使用 DLL *.h 头文件构建(compile.link)应用程序代码,并在运行时加载 DLL 实现(显式链接)
- 使用两个文本文件构建链表
- 从PSD文件构建层comps
- 如何从多个c++文件构建二进制文件
- Eclipse:没有什么要为文件构建的
- MATLAB mex文件构建成功,但没有显示任何内容
- Android OS框架-将单个可执行文件构建为共享对象
- 当尝试从使用makefile生成的目标文件构建时,c++链接器错误.在我刚建立的时候不会发生
- 为什么Xcode 4.2为.cpp文件应用C文件构建规则脚本?
- Matlab Mex文件构建:代码更改不再影响mex文件