在头文件中定义void*数组,并在cpp文件中声明
C++: Defining void* array in header file and declaring it in a cpp file?
我看到了这个问题,我试着按照这个问题的答案去做。在头文件中使用extern
关键字来定义一个数组,然后在其他cpp文件的命名空间或类之外声明它。
它不适合我真的,我不确定,如果它是因为我使用一个空指针数组(即void* array[]
)或如果它只是我的无知,阻止我看到的问题。
这是我能想到的最短的例子:
[cpp.cpp]
#include "h.h"
void main(){
void* a::b[] = {
a::c = a::d(1)
};
}
(h.h) namespace a{
struct T* c;
struct T* d(int e);
extern void* b[];
}
所以问题是我收到错误:变量"a::b"不能在当前作用域中定义
我不知道为什么。
首先,您应该将main()声明为int !请看原因。
在名称空间中声明数组为extern
意味着它属于该名称空间,但在其他地方定义,通常在单独的编译单元中。
不幸的是,在main()中,您试图将元素重新定义为局部变量。这解释了您收到的错误消息。
你应该这样做:
#include "h.h"
void* a::b[] { a::c, a::d(1) }; // global variable belonging to namespace
int main() // int!!!
{
/* your code here */
}
代码可以编译。a::b[]定义在同一个编译单元中是可以接受的。但是链接器会抱怨,因为a::d(1)是对函数d的调用,返回一个指向结构体的指针,而这个函数在任何地方都没有定义。
因此你也应该定义这个:
namespace a {
struct T* d(int e)
{
return nullptr; // in reality you should return a pointer to struct T
}
}
有趣的是,结构体T不需要为这段代码的编译和链接工作。 相关文章:
- 读取文件并将其存储在unordered_map中时出现问题
- 定义C++新的环境变量并在 bat 文件中使用它
- 从.txt文件中读取浮点型数字并在公式中使用它们
- 如何将图像传入C++可执行文件并将输出图像存储在新目录中?
- 如何读取 TXT 文件并仅将 int 存储在 C 中
- 我们如何重新制作程序以打开xml文件并在价格单词之后读取百分比值并更改此值
- 如何将枚举类写入文件并在C++中访问它?
- C ++ OpenGL 如何制作着色器文件并在主 CPP 中使用它
- 嵌入批处理脚本文件并在C 控制台项目中运行
- Qt C++下载XML文件并在textEdit中显示
- 如何读取二进制文件并在屏幕上打印 3?
- 读取外部文件并在类似xml的输入中分配变量
- 我可以在客户端使用 .cc 原型文件并在服务器端使用 .java proto 文件吗?
- 如何调整/延长/截断文件并在开头留出更多空间
- 如何将数据附加到可执行文件并在该应用程序中使用
- 读取文本文件并在C/C++中每行只得到最后一个整数的结果
- 创建生成文件并在子目录中进行编译
- C++将文本文件读取为二进制文件并在控制台中显示
- 读取.wav文件并在C++中应用FFT
- 验证函数中的文件并在主文件中调用它,输出"file is valid"它是否有效