2016-03-27 13 views
0

私はcodeblockideを使用しています。私はadduser.cppファイルから文字列変数 "名" にアクセスしたい別のソースファイルから変数の値にアクセスするにはどうすればよいですか?

main.cppに

#include <iostream> 
#include<string> 
#include<fstream> 
#include "adduser.h" 

using namespace std; 

int main() 
{ 
    string name; 
    adduser(); 
    user(); 
    cout<<name; 
    return 0; 
} 

adduser.cpp

#include<fstream> 
#include<iostream> 
#include<cstdlib> 

using namespace std; 

int adduser() 
{ 
    string name,pass; 
    ofstream fout; 
    fout.open("test.txt"); 
    cout<<"Enter The Name : "; 
    cin>>name; 
    cout<<"Enter The Password : "; 
    cin>>pass; 
    fout<<name<<","<<pass<<endl; 
    fout.close(); 
    return 0; 

} 

adduser.h

#ifndef ADDUSER_H_INCLUDED 
#define ADDUSER_H_INCLUDED 

extern std::string name; 
int adduser(); 

#endif // ADDUSER_H_INCLUDED 

main.cppに印刷します。

「別のソースファイルから変数にアクセスする方法」を検索し、「extern」キーワードを取得しました。

"extern"を使用しましたが、期待したものが得られなかったため、何も表示されません。

ただし、ここでは機能しません。私は間違っているのですか? どうすればいいですか?

+0

をすることができますが、あなたはいけません。 adduserにパラメータとして名前を渡します(あなたはparaneterリストを変更する必要があります)。 –

+0

私はあなたがC++のスコープルールと関数の概念を誤解していると思います。 – 3442

答えて

0

別の関数からadduser()関数のローカル変数にアクセスしようとしているようですが、これはC++では許可されていません。また 、main()string nameの宣言はadduser.hpp

nameの定義を隠しあなたはここにいくつかのオプションがあります:adduser()の戻り値の型を変更

  • 関数の前の

    • 移動name外をadduser()std::stringとし、return nameとし、の電話番号をmainに変更してname = adduser()
    • adduser()にパラメータstd::string& nameまたはst::string* nameを追加し、adduser(name)またはadduser(&name)mainadduser()を呼び出し、それぞれ
    関連する問題