2016-01-23 81 views
0

我所擁有的是:Visual Studio中不能確定我的全局變量的類型

#include "thread.h" 
    #include <iostream> 
    #include <fstream> 
    #include <vector> 
    #include <string> 

    using namespace std; 

    vector<Requester*> requesters; //global 

    struct Requester { 
     vector<thread> t; 
     vector<int> tracks; 
    }; 

然後在我的功能,我有:

void serviceQ(){ 
    vector<Requester*> test = requesters; //error 
} 

的錯誤是:

no suitable user-defined conversion from "std::vector<<error-type> *, std::allocator<<error-type> *>>" to "std::vector<Requester *, std::allocator<Requester *>>" exists 

至於這是爲什麼我很困惑。爲什麼它調用我的全局變量函數中的錯誤類型?如果我要這樣做:

void serviceQ(){ 
     vector<Requester*> test; 
     //do some stuff 
     vector<Requester*> result = test; //no error 
    } 

然後沒有錯誤。

回答

3

您需要定義

vector<Requester*> requesters; //global 

struct Requester後定義,否則編譯器不知道,當它試圖定義相應vector<Requester*>什麼Requester*手段。或者,您可以只聲明

struct Requester; 

vector<Requester*> requesters;以上。

+0

哇,就是這樣。謝謝!我總是忘記小事情。 – Gawndy

+0

@ user333121沒問題,很高興幫助。一些編譯器的錯誤信息也不是最明顯的。 gcc比較好一點,並且首先明確說明:'錯誤:'請求者'沒有在這個範圍內聲明,所以你至少可以看到錯誤與未定義的類型相關,而不是與向量相關。 – vsoftco