2009-11-12 3 views
2
// stream from file. 
ifstream file; 

int main (int argc, char * argv[]) { 

// get argument passed from command line 
// This is file name 
if (argc != 2) { 
    cout << "use: ./executable <filename>"; 

}else { 
    //cout << "You are using filename: " << argv[1]; 

    // start the file stream 
    file (argv[1]); 
} 

Y a-t-il une raison pour laquelle file(argv[1]) donnerait une erreur? Puis-je avoir un ifstream en tant que variable globale?Une variable ifstream peut-elle être une variable globale?

Répondre

6

Vous essayez d'appeler l'opérateur ifstream() (qui n'existe pas), alors que vous devriez utiliser file.open(argv[1]). En outre, il n'y a rien d'illégal à avoir un ifstream global.

+0

Cela a du sens. Je n'avais pas réalisé que j'utilisais un constructeur. Merci pour votre réponse rapide. –

+0

En fait, il appelle 'ifstream :: operator()' qui n'existe pas. – rlbond

+0

Je suis corrigé. Merci d'avoir fait remarquer cela. –

2

Vous pouvez avoir l'ifstream en tant que variable globale (que ce soit un bon style ou une question différente).

Le problème semble être que vous essayez d'utiliser le constructeur: file(argv[1])

La variable globale serait déjà construit (en utilisant le constructeur par défaut) à ce moment, et vous aurez la place nécessaire d'utiliser le open méthode.

file.open(argv[1]); 
+0

Oui, je réalise que l'utilisation d'une variable globale n'est pas forcément la meilleure idée. Pour ce projet, cela sera suffisant. Merci pour l'explication supplémentaire. –