2014-10-25 7 views
7

Warum dies geschieht?Fehler: kein Typ mit dem Namen ‚Vektor‘ in Namespace ‚std‘

error: no type named 'vector' in namespace 'std'; did you mean 'hecto'? void askForVector(std::vector * vector);

#include <iostream> 
#include <vector> 

void askForVector(std::vector * vector); 

int main() 
{ 
    std::vector<int> vector; 
    int size; 
    askForVector(&vector); 
    std::cout << "\nsize: " << vector.size() << std::endl; 
    std::cout << vector.at(0); 
} 


void askForVector(std::vector * vector) 
{ 
    int size; 
    std::cout << "please insert the size of vector to order: "; 
    std::cin >> size; 

    vector->resize(size); 

    for(int i = 0; i<size; i++){ 
     std::cout << "please insert a value for the " << i+1 << " position: " ; 
     std::cin >> vector[i]; 
    } 

    for(int j: *vector) 
     std::cout << ":"<<j; 
    std::cout << ":\n"; 
} 
+3

'vector' ist eine Klassenvorlage, keine Klasse. – chris

+1

Auch eine Rohzeiger vorbei, wenn Sie brauchen nicht neu ordnen Sie es nicht die beste Idee - ich würde Sie empfehlen, die 'VECTOR' durch Verweis übergeben: in Funktionskopf Verwendung' & 'insted' * ' , und verwende das Argument wie einen 'std :: vector'. – GingerPlusPlus

+2

@Lidia: Wenn eine Antwort Ihre Probleme gelöst hat, sollten Sie sie so schnell wie möglich als akzeptiert markieren. – GingerPlusPlus

Antwort

11

vector ist eine Vorlage, kein Typ. Entweder geben Sie eine besondere Spezialisierung:

void askForVector(std::vector<int> * vector); 

oder die Funktion machen generic

template <typename T> 
void askForVector(std::vector<T> * vector); 

Vielleicht haben Sie besser eine Referenz verwendet, anstatt einen Zeiger:

void askForVector(std::vector<int> & vector); 

oder Rückgabe des Vektors durch Wert:

std::vector<int> askForVector() { 
    std::vector<int> vector; 
    // your code here 
    return vector; 
} 

zu vermeiden Fehler wie

std::cin >> vector[i]; // should be (*vector)[i] 
+2

Wenn ich die Vorlage verwende, wie Sie sagen, bekomme ich einen peinlichen Fehler: Nicht definierte Symbole für die Architektur x86_64: "askForVector (Std :: __ 1 :: Vektor > *)", referenziert von: _main in insertionsort-GrnjUF.o ld: Symbol (e) nicht für Architektur gefunden x86_64 –

+1

@LidiaFreitas: Es klingt, als hätten Sie die Vorlage in einer Quelldatei definiert und versucht, sie in einer anderen zu verwenden. Vorlagen müssen normalerweise in einem Header definiert werden, da die Definition in jeder Quelldatei benötigt wird, die sie instanziieren muss. Siehe http://stackoverflow.com/questions/495021 –

4

Es gibt mehrere Probleme:

  1. Vektor ist eine Vorlage, kein Typ, müssen Sie die Listenvorlage Argument z vector<int> in der Funktionssignatur

  2. Da Sie einen Zeiger auf einen Vektor Sie dereferenzieren müssen vorbei sind zu vor den Operator Index mit

    std::cin >> vector[i]; // wrong 
    std::cin >> (*vector)[i]; // correct 
    

Die folgende funktionieren könnte:

#include <iostream> 
#include <vector> 

void askForVector(std::vector<int> * vector); 

int main() 
{ 
    std::vector<int> vector; 
    int size; 
    askForVector(&vector); 
    std::cout << "\nsize: " << vector.size() << std::endl; 
    std::cout << vector.at(0); 

} 


void askForVector(std::vector<int> * vector) 
{ 
    int size; 
    std::cout << "please insert the size of vector to order: "; 
    std::cin >> size; 

    vector->resize(size); 

    for (int i = 0; i<size; i++){ 
     std::cout << "please insert a value for the " << i + 1 << " position: "; 
     std::cin >> (*vector)[i]; 
    } 

    for (int j : *vector) 
     std::cout << ":" << j; 
    std::cout << ":\n"; 
} 

Example

+3

Diese seltsame Besetzung ist unnötig und etwas gefährlich. '(* vector) [i]' ist alles was benötigt wird, um auf ein Vektorelement zuzugreifen. –

+1

Das ist wahr, obwohl ich etwas lieber übermäßig wortreich bin, um die Dinge effektiv zu erklären. Bearbeitung.. –

Verwandte Themen