簡體   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