将C++主方法移动到其自己的文件时发生编译器错误
Compiler error when moving C++ main method to its own file
这里有世界上最简单的程序。我想你们中的一些人只需要一秒钟就能弄清楚出了什么问题。
foo.h:
#ifndef FOO_H
#define FOO_H
namespace foo
{
char str[ 20 ];
void bar(char* s);
}
#endif
foo.cpp:
#include "foo.h"
using namespace std;
namespace foo
{
void bar(char* s) {
return;
}
}
foo_main.cpp:
#include "foo.h"
using namespace std;
using namespace foo;
int main(void)
{
bar( str );
}
现在,当我尝试将这三个编译在一起时:
g++ foo_main.cpp foo.cpp -o foo
/tmp/cc22NZfj.o:(.bss+0x0): multiple definition of `foo::str'
/tmp/ccqMzzmD.o:(.bss+0x0): first defined here
collect2: ld returned 1 exit status
我想在名称空间foo中使用str作为全局,所以需要保留它。如果我把我的主方法移到foo.cpp中,那么事情就会编译得很好。如果我想把主方法保留在一个单独的文件中,该怎么办?正如你所看到的,我甚至在.h文件中添加了include保护,这样就不会与str发生冲突,但似乎不起作用。怎么了?
就像任何其他全局一样,在需要使用它的地方声明它,并只在一个地方定义它。因此,在foo.h
中,将其标记为extern
。然后在foo.cpp
中定义它。
include指令将包含文件的内容直接包含在包含#include
的文件中。因此,您在这两个cpp文件中都得到了定义char str[ 20 ];
,因此两次。
写入
extern char str[ 20 ];
在头文件中并放入
char str [ 20 ];
只放入一个cpp文件中。
相关文章:
- C++系统找不到指定的文件错误
- C++语法头文件错误
- C++生成文件错误"implicit entry/start for main executable"
- C++/生成文件错误:未定义对"main"的引用
- VS2019:资源文件错误:中性(默认)(未知子语言:0x8)
- C++程序不制作文件(错误)
- 安卓工作室 |CPP 文件错误错误: 位图库中对"AndroidBitmap_unlockPixels"的未定义引用
- "what does ":*** [可执行文件] 错误 1 " mean ?"
- 如何修复使用VScode调试器gcc调试时的"找不到文件"错误
- 在课堂上创建了一个朋友,给出"无输入文件"错误
- Qt .exe文件错误
- c++ 添加具有写入文件错误的文本变量
- 无法转换 .CATPart 文件.错误:输入文件路径似乎包含不支持的字符
- 写入文本文件错误,QT
- C++写入文件错误
- Windows Subsystem for Linux (WSL) 下的间歇性随机"找不到文件"错误
- 犰狳读取MAT文件错误
- 无法求解FullPathForFilename:COCOS2DX中可能缺少文件错误
- C Wininet FTP列出了许多文件错误
- 生成文件错误 - 找不到文件 - *.cpp