私はgvimを使用してクラスのc ++を実行しています(Linuxで実行する必要があると言われ、クラスはc ++を使用して教えられているため)。私は以前に Java のクラスを受講したことがありますが、この先生は、C++ だけを使用する別のクラスであると述べているため、C++ や Linux で物事を行う方法を実際には教えてくれませんでした。
宿題で抱えている問題は、いくつかのクラスを作成して互いに情報を取得する必要があることですが、コンパイルしようとすると常にエラーが発生します。(私はそれらを互いに通信させ、関数/変数を互いに使用させる方法を理解できないようです。)
元:
class a {
string user;
public: string user2;
public: vector<string> friendList;
public: void userName()
{
cout output
cin >> user;
}
public: void addFriend()
{
cout output
cin >> user2;
friendList.push_back(user2);
}
public: string getName()
{
return user;
}
};
(この 2 番目のクラス 2 の方法を試しましたが、どちらも機能しません) way1--->
class b {
string message, username;
a User;
public: void postMessage()
{
cout ____
getline(cin, message);
username = User.getName();
}
};
またはこの方法---->
class b: public a {
string message, username;
a User;
public: void postMessage()
{
cout ____
getline(cin, message);
username = User.getName();
}
};
(または、このような機能がありました:)
public: void postMessage()
{
cout ____
getline(cin, message);
username = user2;
}
};
クラスはどちらの方法でも互いに話し合っていないようです.これらの方法は機能しないため、どうやってそれらを取得するのかわかりません.
私の質問は、b が a の関数または変数を使用できるように、a を b と通信させるにはどうすればよいかということだと思います。クラスが互いに通信できるように、また各クラスを呼び出すメイン関数を取得できるように知る必要があります(各クラスは別の.cppファイルにあります)。
編集:
(クラスは別のファイルにあります)
エラー用のターミナル用のスクリプトを作成しました。
Script started on Sun 29 Sep 2013 02:27:42 PM CDT
]0;darksithis002@darkmist002-VirtualBox: ~/lab1darksithis002@darkmist002-VirtualBox:~/lab1$ g++ -c homepg.cpp
homepg.cpp:14:26: error: expected class-name before ‘,’ token
homepg.cpp:15:1: error: expected class-name before ‘{’ token
homepg.cpp:18:24: error: ‘user’ was not declared in this scope
homepg.cpp:18:24: error: ISO C++ forbids initialization of member ‘userName1’ [-fpermissive]
homepg.cpp:18:24: error: making ‘userName1’ static [-fpermissive]
homepg.cpp:18:24: error: invalid in-class initialization of static data member of non-integral type ‘std::string {aka std::basic_string<char>}’
homepg.cpp:19:19: error: ISO C++ forbids initialization of member ‘counter’ [-fpermissive]
homepg.cpp:19:19: error: making ‘counter’ static [-fpermissive]
homepg.cpp:19:19: error: ISO C++ forbids in-class initialization of non-const static member ‘counter’
homepg.cpp:20:30: error: ‘friendList’ was not declared in this scope
homepg.cpp:20:30: error: ISO C++ forbids initialization of member ‘friends’ [-fpermissive]
homepg.cpp:20:30: error: making ‘friends’ static [-fpermissive]
homepg.cpp:20:30: error: invalid in-class initialization of static data member of non-integral type ‘std::vector<std::basic_string<char> >’
homepg.cpp:22:5: error: ‘cout’ does not name a type
homepg.cpp:23:5: error: ‘cout’ does not name a type
homepg.cpp:24:5: error: ‘cout’ does not name a type
homepg.cpp:29:26: error: ISO C++ forbids declaration of ‘displayHome’ with no type [-fpermissive]
homepg.cpp: In member function ‘int homepg::displayHome()’:
homepg.cpp:31:12: error: ‘messageBuff’ was not declared in this scope
homepg.cpp:45:6: error: ‘nextbrac’ was not declared in this scope
homepg.cpp:53:18: error: ‘userName’ was not declared in this scope
homepg.cpp:64:28: error: ‘friends’ was not declared in this scope
homepg.cpp:85:6: error: ‘count’ was not declared in this scope
]0;darksithis002@darkmist002-VirtualBox: ~/lab1darksithis002@darkmist002-VirtualBox:~/lab1$ g++ -c messageBuffer.cpp
messageBuffer.cpp: In member function ‘void messageBuffer::postMessage()’:
messageBuffer.cpp:26:13: error: ‘user’ was not declared in this scope
messageBuffer.cpp: In member function ‘void messageBuffer::tweetMessage()’:
messageBuffer.cpp:45:17: error: ‘user’ was not declared in this scope
]0;darksithis002@darkmist002-VirtualBox: ~/lab1darksithis002@darkmist002-VirtualBox:~/lab1$ exit
exit
Script done on Sun 29 Sep 2013 02:29:16 PM CDT
テストとして、私は2つのクラスをまとめました。1つはそれ自体でうまくコンパイルされ、もう1つは他のクラスからの関数/変数が必要であり、コンパイルしようとしましたが、それらは次のようにうまくコンパイルされました
class a {
*functions and variables for a* }
class b {
a A;
*functions for b* }
この例のクラスbは、同じディレクトリ内の別のファイルにある場合、aを呼び出そうとすると機能しません。作成したスクリプトでエラーが発生します。
EDIT2:メイン関数を入れてクラスaとbから関数を呼び出すと、テストファイルでもエラーが発生します。(このエラーは関数を宣言していないことが原因であることはわかっていますが、関数をクラスで宣言しようとすると、別のエラーが表示されます: type::functionname はオーバーロードできませんが、a と b の両方の宣言を取り出すと正常にコンパイルされ、b は a の関数を使用できるのに、なぜ関数宣言なしで正常に実行できるのに、メイン関数では使用できないのでしょうか? また、関数をクラスに含めることができない場合は、関数の宣言をどこに置くのですか?それらをオーバーロードできないと言いますか?)