困惑,为什么是c++;未在此作用域中声明全局变量 我是C++新手。我试图修改一个非常复杂的视频编解码器代码,作为我最后一年学校项目的一部分。我已经在另一个帖子上问过了,但没有得到任何帮助。这是我的代码:

困惑,为什么是c++;未在此作用域中声明全局变量 我是C++新手。我试图修改一个非常复杂的视频编解码器代码,作为我最后一年学校项目的一部分。我已经在另一个帖子上问过了,但没有得到任何帮助。这是我的代码:,c++,scope,extern,C++,Scope,Extern,这是我在其中声明了三个外部变量的头文件: 嗯 检查analysis.cpp以查看是否未定义 namespace X265_NS { int frameNumber; int frameSize; std::vector<int>numbers; } 而不是: frameSize = 0; 检查analysis.cpp以查看是否未定义 namespace X265_NS { int frameNumber; int frameSize;

这是我在其中声明了三个外部变量的头文件:


检查analysis.cpp以查看是否未定义

namespace X265_NS {
    int frameNumber;
    int frameSize;
    std::vector<int>numbers;
}
而不是:

frameSize = 0;

检查analysis.cpp以查看是否未定义

namespace X265_NS {
    int frameNumber;
    int frameSize;
    std::vector<int>numbers;
}
而不是:

frameSize = 0;

您可能包含了错误的文件。很可能在一些库源代码中有另一个
yuv.h
文件,它包含在
analysis.cpp
中,而不是您需要的文件中。您可以通过在
yuv.h
中添加一些错误的代码并尝试编译
analysis.cpp

来快速检查这一点,您可能包含了错误的文件。很可能在一些库源代码中有另一个
yuv.h
文件,它包含在
analysis.cpp
中,而不是您需要的文件中。您可以通过在
yuv.h
中添加一些错误代码并尝试编译
analysis.cpp

来快速检查这一点。源代码中的命名空间与错误消息中的命名空间不同,
X265
。这里有宏吗?宏的定义在任何地方都是一样的吗?没有使用宏。事实上,当我将鼠标悬停在yuv.h文件中的frameNumber上时,出现的工具提示显示“int x265::frameNumber”,与错误显示的相同,尽管所提到的名称空间是x265。另外,代码中提到的另一条注释是“//private x265 namespace”,在x265_NS的开头括号下。部分问题是您正在编译源代码,然后链接到一个已经包含相同源代码的库。但是我不明白为什么构建过程甚至在出现编译错误时运行链接器。如果您是基于git项目,那么X265到x256的宏定义发生在第385行的source/CMakeLists.txt文件中:add_definitions(-DX265_NS=${X265_NS})。看起来您正在使用Windows,所以可能是其他生成文件。无论如何,很明显,这实际上不是名称空间,代码希望构建系统在编译器命令行上定义它。源代码中的名称空间与错误消息中的名称空间不同,
X265
。这里有宏吗?宏的定义在任何地方都是一样的吗?没有使用宏。事实上,当我将鼠标悬停在yuv.h文件中的frameNumber上时,出现的工具提示显示“int x265::frameNumber”,与错误显示的相同,尽管所提到的名称空间是x265。另外,代码中提到的另一条注释是“//private x265 namespace”,在x265_NS的开头括号下。部分问题是您正在编译源代码,然后链接到一个已经包含相同源代码的库。但是我不明白为什么构建过程甚至在出现编译错误时运行链接器。如果您是基于git项目,那么X265到x256的宏定义发生在第385行的source/CMakeLists.txt文件中:add_definitions(-DX265_NS=${X265_NS})。看起来您正在使用Windows,所以可能是其他生成文件。无论如何,很明显,这实际上不是名称空间,代码期望构建系统在编译器命令行上定义它(我只是没有注意到,但你是对的,它包含了另一个yuv.h文件。我只是没有注意到,但你是对的,它包含了另一个yuv.h文件。
namespace X265_NS {
    int frameNumber;
    int frameSize;
    std::vector<int>numbers;
}
int frameSize = 0;
frameSize = 0;