繁体   English   中英

C ++未知名称类型

[英]C++ unknown name type

我有一个定义一些参数的头文件。 我已经将某些参数定义为extern。 我的程序可以与其他数据类型(例如double和int)一起正常工作,除非尝试添加矢量变量。 头文件中的声明是

extern std::vector<double> my_vec;

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

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

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

PS我最初试图使用以下方法为此向量分配一些值:

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()是向量类的方法-调用方法(而不是构造变量)是一条语句,就像x = 1; 这些属于功能。

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

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

或确保以您希望的方式构建my_vec

同样,更普遍地,如果您确实不需要全局变量,则应避免使用它们。 而且-您很少这样做。 看到:

全局变量不好吗?

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM