gpt4 book ai didi

C++ 未知名称类型

转载 作者:太空宇宙 更新时间:2023-11-03 10:38:22 27 4
gpt4 key购买 nike

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

extern std::vector<double> my_vec;

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

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

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

附言我最初尝试使用以下方法为该 vector 分配一些值:

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() 是 vector 类的方法并不重要 - 调用方法(与构造变量相反)是一个语句,就像 x = 1; 。那些属于函数。

你必须把你的声明放在你的 main() 的某个地方,例如:

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

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

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

Are global variables bad?

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

关于C++ 未知名称类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53233544/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com