C++ 未知名称类型

C++ unknown name type

我有一个头文件定义了一些参数。我已经将一些参数定义为 extern。我的程序可以很好地处理其他数据类型,例如 double 和 int,除非我尝试添加向量变量。头文件中的声明是

extern std::vector<double> my_vec;

在我的主文件中,我使用以下代码构建向量:

std::vector<double> my_vec(3,0);

当我尝试使用 clear 方法清除向量时,编译器给出了一个错误,指出未知类型。我什至不确定如何调试它。有人可以帮忙吗?

P.S。我最初尝试使用以下方法为该向量分配一些值:

my_vec[0] = 1;

但是编译器说 C++ 需要所有声明的类型说明符。我用谷歌搜索了这个错误,但我不明白,因为我正在指定 my_vec.

的类型

编辑:示例:

main.cpp
#include "params.h"
#include <vector>

std::vector<double> my_vec(3,0);

my_vec.clear();
// edit: my_vec[0] = 1; this also produces an error

int main(){
    return 0;
}

params.h
#include <vector>

extern std::vector<double> my_vec;

错误信息:

main.cpp:6:1: error: unknown type name 'my_vec'
my_vec.clear();
^
main.cpp:6:7: error: cannot use dot operator on a type
my_vec.clear();
      ^
2 errors generated.

您不能在函数外执行语句 - 这正是您要对 my_vec.clear(); 执行的操作。 clear() 是向量 class 的方法并不重要 - 调用方法(与构造变量相反)是一个语句,就像 x = 1; 一样。那些属于函数。

您必须将声明放在 main() 的某处,例如:

int main(){
    my_vec.clear();
    return 0;
}

或者确保 my_vec 以您希望的方式开始构建。

此外,更一般地说,如果您确实不需要全局变量,则应避免使用它们。而且 - 你很少这样做。参见:

Are global variables bad?

编辑: OP 询问我们是否可以以某种方式绕过此限制。首先 - 你真的不应该(看看我刚才说的)。但这是可能的:我们可以使用 static block,它可以在 C++ 中实现,有点像。