全局结构C
Global struct c++
我知道这个问题以前曾多次问过,但是我无法正常工作。对于特殊情况,我需要拥有一个将填写在一个文件中并阅读另一个文件的全局结构。
以下代码给我一个链接错误:
Undefined symbols for architecture x86_64:
"_camera_data", referenced from:
MyCameraData::return_sensor_shift() in extra-424af5.o
ld: symbol(s) not found for architecture x86_64
clang-5.0: error: linker command failed with exit code 1 (use -v to see invocation)
common.h:
#ifndef COMMON_H
#define COMMON_H
struct MyCameraData
{
float sensor_shift;
float return_sensor_shift();
};
extern MyCameraData camera_data;
#endif
main.cpp:
#include "common.h"
#include <iostream>
int main(){
MyCameraData camera_data;
camera_data.sensor_shift = 5.0;
std::cout << camera_data.return_sensor_shift() << std::endl;
}
extra.cpp:
#include "common.h"
float MyCameraData::return_sensor_shift(){
return camera_data.sensor_shift;
}
一定有我忽略的东西。有什么想法吗?
您可以移动
MyCameraData camera_data;
从 main
到main.cpp中的全局范围,以解决链接器错误。但是,我建议创建一个common.cpp并定义该文件中的变量。比在main.cpp中定义它更干净。
common.cpp:
#include "common.h"
MyCameraData camera_data;
main.cpp:
#include "common.h"
#include <iostream>
int main()
{
camera_data.sensor_shift = 5.0;
std::cout << camera_data.return_sensor_shift() << std::endl;
}
此部分还可以:
common.h
#ifndef COMMON_H
#define COMMON_H
struct MyCameraData
{
float sensor_shift;
float return_sensor_shift();
};
extern MyCameraData camera_data;
#endif
由于您在标题文件中将camera_data
声明为extern
,这只是您缺少其定义的声明。
修复此文件:
common.cpp
#include "Common.h"
MyCameraData camera_data;
这应该解决您的问题。
相关文章:
- 带参数的数据结构的全局声明
- 从函数中全局删除并重新实例化数组结构,而无需在编译时知道数组的大小
- 在.cpp文件之间传递结构声明,而不使用全局头文件
- 在两个.cpp文件之间定义全局类/结构指针
- 是否可以在C++ (C) 中使用全局范围对象(结构)?
- 在结构声明的分号之前声明的结构变量是否为全局变量
- C 和 C++ 标头:在另一个结构内定义全局结构
- 全局结构C
- 如果将其添加为全局结构,则如何将其添加为NULL
- 访问全局数据结构
- 未调用静态全局结构的析构函数
- 将大小设置为结构类型全局变量时发生编译器错误
- C 全局结构创造了名称冲突
- 我是否可以在类似于 C# 的 C++ 中创建全局命名空间层次结构,以帮助开发人员使用我们的代码?
- 使结构内定义的枚举具有全局范围C++
- c++链接错误,找不到全局.h结构
- 全局声明的数据结构可以有多大
- 函数调用重置传递的全局结构的字段
- 在C++中声明头文件中的全局结构
- 为什么不允许全局的结构/联合子项作为模板引用参数 - 而是全局变量本身