Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/144.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 全局结构c++;_C++_Struct_Linker_Global - Fatal编程技术网

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