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++ 中实现,有点像。
我有一个头文件定义了一些参数。我已经将一些参数定义为 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++ 中实现,有点像。