C++ C++;未知名称类型

C++ C++;未知名称类型,c++,function,global-variables,statements,C++,Function,Global Variables,Statements,我有一个定义一些参数的头文件。我已经将一些参数定义为extern。我的程序可以很好地处理其他数据类型,比如double和int,除非我尝试添加向量变量。头文件中的声明是 extern std::vector<double> my_vec; 但是编译器说C++对所有声明都需要类型说明符。我用谷歌搜索了这个错误,但我不明白,因为我正在指定我的_vec的类型 编辑:示例: main.cpp #include "params.h" #include <vector> std:

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

extern std::vector<double> my_vec;
<>但是编译器说C++对所有声明都需要类型说明符。我用谷歌搜索了这个错误,但我不明白,因为我正在指定我的_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;

您不能在函数之外执行语句-这就是您试图使用
my_vec.clear()所做的
clear()
是vector类的一个方法并不重要——调用一个方法(而不是构造一个变量)是一个语句,就像
x=1。这些属于功能

您必须将语句放在
main()
中的某个位置,例如:

int main(){
    my_vec.clear();
    return 0;
}
或者首先,确保按照您希望的方式构建
my_vec

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


编辑:OP询问我们是否能够以某种方式绕过此限制。首先,你真的不应该(看我刚才说的)。但是,我们可以使用一个可以在C++中实现的,例如.< /p> ,您不能执行函数之外的语句——这就是您试图用<代码> MyoVIE.Cube()来做的事情;代码>。
clear()
是vector类的一个方法并不重要——调用一个方法(而不是构造一个变量)是一个语句,就像
x=1。这些属于功能

您必须将语句放在
main()
中的某个位置,例如:

int main(){
    my_vec.clear();
    return 0;
}
或者首先,确保按照您希望的方式构建
my_vec

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


编辑:OP询问我们是否能够以某种方式绕过此限制。首先,你真的不应该(看我刚才说的)。但是,我们可以使用一个可以在C++中实现的,比如.< /p>,我们可以逐字地获得一个?和错误消息。@ SaligGupTa:在函数内,它是有效的。但只有声明可以存在于函数之外。错误消息的奇怪之处在于编译器需要一个声明,因此试图将您的函数调用硬塞进该模型中。您不能调用。在函数外部的my_vec上清除。。。错误消息既愚蠢又令人困惑,但是,嘿,这是C++我们能得到一个吗?错误消息请逐字逐句。@SahilGupta:在函数内部,它是有效的。但只有声明可以存在于函数之外。错误消息的奇怪之处在于编译器需要一个声明,因此试图将您的函数调用硬塞进该模型中。您不能调用。在函数外部的my_vec上清除。。。错误消息是愚蠢和令人困惑的,但是,嘿,这是C++对于赋值也是这样吗?my_vec[0]=1;似乎不起作用;错误:C++需要所有类型的说明符declarations@SahilGupta:是的。在函数外部,您只能构造一个全局变量,不能将其赋值给现有变量。@SahilGupta-这看起来像赋值,但实际上是伪装成赋值的函数调用。(int x=42就可以了)@pm100:通常也不允许函数调用,你的意思是说,这是构造函数调用。@einpoklum开得对!我是为双变量而做的,它是有效的。但当我试着使用向量时,错误真的很奇怪。在其他答案的背景下,你所说的完全有道理。那么,有没有其他方法可以解决这个问题?对于作业也是这样吗?my_vec[0]=1;似乎不起作用;错误:C++需要所有类型的说明符declarations@SahilGupta:是的。在函数外部,您只能构造一个全局变量,不能将其赋值给现有变量。@SahilGupta-这看起来像赋值,但实际上是伪装成赋值的函数调用。(int x=42就可以了)@pm100:通常也不允许函数调用,你的意思是说,这是构造函数调用。@einpoklum开得对!我是为双变量而做的,它是有效的。但当我试着使用向量时,错误真的很奇怪。在其他答案的背景下,你所说的完全有道理。那么,还有别的办法吗?
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.
int main(){
    my_vec.clear();
    return 0;
}