2016-04-27 3 views
0

Эй, ребята у меня есть этот код:Ошибка: необходимость «имяТипа» перед итераторных

#include<iostream> 
#include<string> 
#include<list> 
#include<vector> 

template<class T> 
class ListLib { 
public: 
    ListLib(std::list<T>& listItem) { 
     *listT = listItem; 
    } 

    std::vector<T> convertToVector() { 
     std::vector<T> result; 
     std::list<T>::iterator itList; 

     for (itList = *listT->begin(); itList != *listT->end(); itList++) 
      result->(*itList); 

     std::vector<T>::iterator itVec; 
     for (itVec = result.begin(); itVec != result.end()) 
      std::cout << *itVec << std::endl; 
    } 
private: 
    std::list<T> *listT; 
}; 

int main() { 
    std::list<std::string> sampleList; 
    std::vector<std::string> sampleVector; 
    sampleList.push_back("3"); 
    sampleList.push_back("4"); 
    sampleList.push_back("5"); 
    sampleList.push_back("6"); 

    ListLib<std::string> listLib(sampleList); 
    std::cout << "Hello World" << std::endl; 
} 

И я попытался решить многие ошибки, которые я получил с этим, но привело ни к чему хорошему я сделал функцию, которая делает то же самое вещь как libary im, делающая теперь с классом. мне нужна помощь! Вот ошибка:

/home/ubuntu/workspace/c++/CustomLibaries/listLib.cpp: In member function ‘std::vector<T> ListLib<T>::convertToVector()’:                             
/home/ubuntu/workspace/c++/CustomLibaries/listLib.cpp:15:3: error: need ‘typename’ before ‘std::list<T>::iterator’ because ‘std::list<T>’ is a dependent scope                    
    std::list<T>::iterator itList;                      
^                            
/home/ubuntu/workspace/c++/CustomLibaries/listLib.cpp:15:26: error: expected ‘;’ before ‘itList’      
    std::list<T>::iterator itList;                      
         ^                       
/home/ubuntu/workspace/c++/CustomLibaries/listLib.cpp:17:8: error: ‘itList’ was not declared in this scope   
    for (itList = *listT->begin(); itList != *listT->end(); itList++)             
     ^                           
/home/ubuntu/workspace/c++/CustomLibaries/listLib.cpp:18:12: error: expected unqualified-id before ‘(’ token   
    result->(*itList);                        
      ^                          
/home/ubuntu/workspace/c++/CustomLibaries/listLib.cpp:20:3: error: need ‘typename’ before ‘std::vector<T>::iterator’ because ‘std::vector<T>’ is a dependent scope                   
    std::vector<T>::iterator itVec;                     
^                            
/home/ubuntu/workspace/c++/CustomLibaries/listLib.cpp:20:28: error: expected ‘;’ before ‘itVec’      
    std::vector<T>::iterator itVec;                     
          ^                      
/home/ubuntu/workspace/c++/CustomLibaries/listLib.cpp:21:8: error: ‘itVec’ was not declared in this scope    
    for (itVec = result.begin(); itVec != result.end())                
     ^
/home/ubuntu/workspace/c++/CustomLibaries/listLib.cpp:21:53: error: expected ‘;’ before ‘)’ token 
    for (itVec = result.begin(); itVec != result.end()) 
                ^
+0

Вам не хватает полуколланов по всему месту .... и когда-либо там, где говорится, что перед ним нужно 'typename' (например,' std :: vector :: iterator'), измените его на 'typename std :: vector :: итератор – DarthRubik

+0

Хмм @ Дартрубик! полуколенье? xD .. Anways, почему мне нужно typename? Что оно делает? –

+3

Какая часть «need» typename 'before' std :: list :: iterator '' вы не могли понять? –

ответ

1

Вашей пропавшая много с запятой, а также необходимо ключевым словом typename перед всем itterators .. Это устраняет все проблемы, у вас есть:

#include<iostream> 
#include<string> 
#include<list> 
#include<vector> 

template<class T> 
class ListLib { 
public: 
    ListLib(std::list<T>& listItem) { 
     *listT = listItem; 
    } 

    std::vector<T> convertToVector() { 
     std::vector<T> result; 
     typename std::list<T>::iterator itList; 

     for (itList = *listT->begin(); itList != *listT->end(); itList++) 
       result.push_back(*itList); 

     typename std::vector<T>::iterator itVec; 
     for (itVec = result.begin(); itVec != result.end(); itVec++) 
      std::cout << *itVec << std::endl; 
    } 
private: 
    std::list<T> *listT; 
}; 

int main() { 
    std::list<std::string> sampleList; 
    std::vector<std::string> sampleVector; 
    sampleList.push_back("3"); 
    sampleList.push_back("4"); 
    sampleList.push_back("5"); 
    sampleList.push_back("6"); 

    ListLib<std::string> listLib(sampleList); 
    std::cout << "Hello World" << std::endl; 
} 

/*template<class T> 
void convertListToVector(std::list<T> *listItem, std::vector<T> *vectorConvert) { 
std::list<T>::iterator it; 
for (it = *listItem->begin(); it != *listItem->end(); it++) 
*vectorConvert->push_back(*it); 
}*/ 

Рабочие "C++ Fiddle"