プライベート変数を使用して、個別のファイルにクラスを作成しようとしています。これまでのところ、私のクラスコードは次のとおりです。
TestClass.h内
#ifndef TESTCLASS_H
#define TESTCLASS_H
#include <string>
using namespace std;
class TestClass
{
private:
string hi;
public:
TestClass(string x);
void set(string x);
void print(int x);
};
#endif
TestClass.cpp内
#include "TestClass.h"
#include <iostream>
#include <string>
using namespace std;
TestClass::TestClass(string x)
{
cout << "constuct " << x << endl;
}
void set(string x){
hi = x;
}
void print(int x){
if(x == 2)
cout << hi << " x = two\n";
else if(x < -10)
cout << hi << " x < -10\n";
else if(x >= 10)
cout << hi << " x >= 10\n";
else
cout << hi << " x = " << x << endl;
}
Code :: Blocksをビルドしようとすると、次のように表示されます。
しかし、私がそれを実行するとき(そしてそれを構築しないとき)、すべてが機能しています。
以下に示すように、TestClass::
を書くのを忘れました。
void TestClass::set(string x)
//^^^^^^^^^^^this
void TestClass::print(int x)
//^^^^^^^^^^^this
これは、コンパイラがset
とprint
がクラスTestClass
のメンバー関数であることを認識できるようにするために必要です。そして、それを記述してメンバー関数にすると、クラスのプライベートメンバーにアクセスできるようになります。
また、TestClass ::がないと、set
およびprint
関数は無料の関数になります。
使用する
void TestClass::set(string x){
そして
void TestClass::print(int x){
あなたの.cpp
ファイルの場合、次のように、setおよびprintメンバー関数を明示的にクラスの一部にする必要があります。
void TestClass::set(string x){
hi = x;
}
void TestClass::print(int x){
if(x == 2)
cout << hi << " x = two\n";
else if(x < -10)
cout << hi << " x < -10\n";
else if(x >= 10)
cout << hi << " x >= 10\n";
else
cout << hi << " x = " << x << endl;
}
print
関数とset
関数をクラス名でスコープ解決しません。
void TestClass::set(string x){
hi = x;
}
void TestClass::print(int x){
if(x == 2)
cout << hi << " x = two\n";
else if(x < -10)
cout << hi << " x < -10\n";
else if(x >= 10)
cout << hi << " x >= 10\n";
else
cout << hi << " x = " << x << endl;
}
いう
void TestClass::set(string x){
の代わりに
void set(string x){
print()についても同じです。 TestClassのメンバー関数ではなく、グローバル関数として宣言しました。
メソッドはクラスのメソッドとして定義されていません。 TestClass :: setとTestClass :: printを使用してみてください。