1

私は複数ファイルの C++ プログラムにかなり慣れていないので、十分に説明できるかどうかさえわからない問題を抱えています。ここに問題があります。私の .cpp ファイルの 1 つで、その #include リストに含まれている関数を使用できません。

これが私がやったことです: まず、main.cpp にコードを書きました。すべてが正常に機能し、コンパイルして、私が指示したことを正確に実行します。現在、そのコードを client.cpp に移動しようとしていますが、main.cpp で正常に機能していた文字列、ストリーム、またはその他のものを宣言できません。

うまく機能したコードは次のとおりです。

#include <stdio.h>
#include <tchar.h>
#include <iostream>
#include <fstream>
#include <direct.h>
#include <string>

#define SAVE_FILE_LOC "C:\\Saves\\"
int main()        
{        

    ofstream saveFile;    
    string loc;    
    string userName;    
    printf("Please enter your user name:\n");    

    getline(cin, userName);    

    loc = SAVE_FILE_LOC;    
    loc = loc + userName;    
    if (_mkdir(loc.c_str()) == -1){    
        printf("Location Already Exists!\n");
    }    
    else{    
        loc = loc + "\\Profile.txt";
        saveFile.open(loc.c_str());
        saveFile << "Test";
        saveFile.close();
    }    
    return 0;    
}        

今、私がした唯一のことは、「ソースファイル」フォルダーを右クリックして(VSで)新しい.cppファイルを追加し、client.cppという名前を付け、上記の正確なコードをコピーしてファイルに貼り付けたことでした。動作しません。

#include <stdio.h>        
#include <tchar.h>        
#include <iostream>        
#include <fstream>        
#include <direct.h>        
#include <string>        

#define SAVE_FILE_LOC "C:\\Saves\\"        

int login(void);        

int login(void)        
{        
    ofstream saveFile;    
    string loc;    
    string userName;    
    printf("Please enter your user name:\n");    

    getline(cin, userName);    

    loc = SAVE_FILE_LOC;    
    loc = loc + userName;    
    if (_mkdir(loc.c_str()) == -1){    
        printf("Location Already Exists!\n");
    }    
    else{    
        loc = loc + "\\Profile.txt";
        saveFile.open(loc.c_str());
        saveFile << "Test";
        saveFile.close();
    }    
    return 0;    
}        

上記のコードから 30 のコンパイル エラーが発生します。例を次に示します。

エラー 1 エラー C2065: 'ofstream': 宣言されていない識別子 ***\Client.cpp 14 1 ConsoleApplication4

エラー 2 エラー C2146: 構文エラー: ';' がありません 識別子 'saveFile' の前に ***\Client.cpp 14 1 ConsoleApplication4

コンパイラは、突然、文字列やストリームなどを作成できないと言っています。コードの #include 部分でエラーが発生していないことに注意してください。したがって、ライブラリが見つからないことを示しているわけではありません。

この場合、ここで何を探す必要があるのか​​ わかりません.mainという名前ではない.cppファイルを作成すると、インクルードが機能しないのはなぜですか?

編集:問題が見つかり、メインが使用されusing namespace std、client.cppにその行がありませんでした。

4

1 に答える 1

0

のような名前はstringofstream標準ライブラリの名前の前に名前空間 std::を付ける必要があります。投稿したものは、使用しようとしているクラス/関数 (string、ofstream、getline)のインクルードusing namespace std;の下または前にありません。std::

于 2013-09-28T20:08:20.477 に答える