Sah*_*pta 1 c++ function global-variables statements
我有一个头文件定义一些参数.我已经将一些参数定义为extern.我的程序适用于其他数据类型,如double和int,除非我尝试添加矢量变量.头文件中的声明是
extern std::vector<double> my_vec;
Run Code Online (Sandbox Code Playgroud)
在我的主文件中,我使用以下代码构建向量:
std::vector<double> my_vec(3,0);
Run Code Online (Sandbox Code Playgroud)
当我尝试使用clear方法清除向量时,编译器会给出一个错误说明未知类型.我甚至不确定如何调试这个.有人可以帮忙吗?
PS我原本试图使用以下方法为此向量分配一些值:
my_vec[0] = 1;
Run Code Online (Sandbox Code Playgroud)
但是编译器说C++需要所有声明的类型说明符.我用Google搜索了这个错误,但我不明白,因为我指定了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;
Run Code Online (Sandbox Code Playgroud)
错误信息:
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.
Run Code Online (Sandbox Code Playgroud)
你不能在函数之外执行语句 - 这是你正在尝试做的事情my_vec.clear();.无论clear()是向量类的方法 - 调用方法(而不是构造变量)是一个语句,就像x = 1;.那些属于功能.
你必须把你的陈述放在你的某个地方main(),例如:
int main(){
my_vec.clear();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
或者首先确保并构建my_vec你想要的样子.
此外,更一般地说,如果你真的不需要它们,你应该避免使用全局变量.并且 - 你很少这样做.看到:
编辑: OP询问我们是否能以某种方式解决这个限制.首先 - 你真的不应该(看我刚才说的).但它有可能:我们可以使用静态块,它可以在C++中实现.