Problem: Kommandozeilenargumente



  • Hallo,

    ich hoffe hier kann mir jemand helfen: Ich habe folgendes Programm geschrieben, das einen Text einlesen soll: Diesen Text möchte ich in der Kommandozeile übergeben, also zum Beispiel: g++ 91.cpp in.text
    das funktioniert aber nicht und bekomme ich immer folgende Fehlermeldung:

    /usr/bin/ld:in.txt: file format not recognized; treating as linker script
    /usr/bin/ld:in.txt:1: syntax error
    collect2: ld returned 1 exit status
    

    Mein Programm sieht folgendermaßen aus:

    #include <iostream>
    #include <fstream>
    #include <string>
    #include <vector>
    #include <locale>
    
    using namespace std;
    
    class Lexikon {
    private: 
    	vector<string> _memory;               //... _ steht für "aus dem private Bereich" 
    	int _number_of_elements_in_memory;
    
    public: 
        Lexikon();
    	void add_element(string elem); 
    	bool is_element(string elem); 
    	void drucke_memory(); 
    }; 
    
    int main(int argc, char** argv) { 
    // int argc beinhaltet die Anzahl von Argumenten, welche dem Programm beim Start übergeben wurden  
    // Im zweiten Parameter stehen die einzelnen Argumente. 
    // Diese werden als Strings in einer Stringtabelle gespeichert.
    
    	locale loc("");
    	locale::global(loc); 
    
    	ifstream in(argv[1]);
    	//in.imbue(loc); 
    
    	Lexikon lex;
    	string str;
    
    	while(in >> str) 
    		lex.add_element(str);
    
    	// lex.add_element(string("erna")); //string weil sonst cstring erwartet wird 
    	// lex.add_element(string("hans"));
    	// lex.add_element(string("franz"));
    
    	if (lex.is_element((string)"erna")) {
    		cout << "Habe erna gefunden" << endl;
    	}
    	else {
    		cout << "Habe erna leider nicht gefunden :-(" << endl;
    	} 
    
    	lex.drucke_memory(); 
    
    	return 0;
    }
    
    // Konstruktor: _number_of_elements_in_memory auf Null setzen 
    Lexikon::Lexikon() : _number_of_elements_in_memory(0) {
    	// _number_of_elements_in_memory=0; 
    }
    
    void Lexikon::add_element(string word) {
    	_memory.push_back(word);
    	_number_of_elements_in_memory++;
    }
    
    bool Lexikon::is_element(string word) {
    	vector<string>::const_iterator it=_memory.begin(); //const_iterator weil man nichts ändert!
    	for (; it !=_memory.end(); ++it) { 
    		if (*it == word) 
    			return true;
        }
        if (it == _memory.end() )
    		return false;	
    }
    
    void Lexikon::drucke_memory() {
    	for (vector<string>::const_iterator it = _memory.begin(); it != _memory.end(); ++it) {
    		cout << *it <<endl; 
    	 }
    }
    

    vielleicht kannt mir jemand helfen , und sagen was genau ich da falsch mache?!?!

    Vielen Dank

    nc10



  • Völlig falsches Forum: besser wäre C++. Hier ist C++/CLI!



  • Du kompilierst so:

    g++ -o main main.cpp
    

    Rufst dein Programm so auf:

    ./main test.txt
    

Anmelden zum Antworten