C++ 全局结构c++;
我知道这个问题以前被问过很多次,但我无法让它起作用。对于一个特殊情况,我需要一个全局结构,它将在一个文件中填充,并在另一个文件中读取 以下代码给出了一个链接错误:C++ 全局结构c++;,c++,struct,linker,global,C++,Struct,Linker,Global,我知道这个问题以前被问过很多次,但我无法让它起作用。对于一个特殊情况,我需要一个全局结构,它将在一个文件中填充,并在另一个文件中读取 以下代码给出了一个链接错误: Undefined symbols for architecture x86_64: "_camera_data", referenced from: MyCameraData::return_sensor_shift() in extra-424af5.o ld: symbol(s) not found for ar
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)
共同点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;
}
#include "common.h"
#include <iostream>
int main()
{
camera_data.sensor_shift = 5.0;
std::cout << camera_data.return_sensor_shift() << std::endl;
}
一定有什么东西我忽略了。有什么想法吗?你可以走了
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(){
MyCameraData camera_data;
camera_data.sensor_shift = 5.0;
std::cout << camera_data.return_sensor_shift() << std::endl;
}
#include "common.h"
#include <iostream>
int main()
{
camera_data.sensor_shift = 5.0;
std::cout << camera_data.return_sensor_shift() << std::endl;
}
#包括“common.h”
#包括
int main()
{
摄像机数据传感器位移=5.0;
std::cout这部分没问题:
Common.h
#ifndef COMMON_H
#define COMMON_H
struct MyCameraData
{
float sensor_shift;
float return_sensor_shift();
};
extern MyCameraData camera_data;
#endif
由于您在头文件中将camera\u data
声明为extern
,而头文件只是一个声明,因此您缺少其定义
要修复此问题,请添加此文件:
Common.cpp
#include "Common.h"
MyCameraData camera_data;
这将解决您的问题。您将camera\u data
声明为extern
,意思是“相信我,它在别处定义”。但您从未在任何地方定义过它。可能是Cheers的重复。新手错误!在main
函数中,您仅在main
函数的范围内定义了一个局部变量。它不是您在头文件中声明的全局变量。此外,return\u sensor\u shift
成员函数没有意义e、 它不应该从全局对象返回成员变量,而应该从这个对象返回成员变量,只需执行return sensor\u shift
。