[英]Passing objects into functions within another class c++
我正在學習c ++中的類和對象,並嘗試使用以下代碼測試我是否正確理解了它:
#include <iostream>
using namespace std;
class class1
{
public:
void write(int x)
{
dataObject.var = x;
}
};
class class2
{
public:
void read()
{
std::cout << dataObject.var;
}
};
class data
{
public:
int var;
data()
{
var = 1;
}
};
int main()
{
data dataObject;
class1 object1;
class2 object2;
object2.read(data dataObject);
object1.write(2);
object2.read(data dataObject);
return 0;
}
這是為了兩個對象都用於修改和使用第三個對象的成員,但出現以下錯誤:
In member function 'void class1::write(int)':
line 10: error: 'dataObject' was not declared in this scope
In member function 'void class2::read()':
line 14: error: 'dataObject' was not declared in this scope
In function 'int main()':
line 40 + 42: error: expected primary-expression before 'dataObject'
知道我要去哪里錯了嗎? 提前致謝。
編輯:感謝所有的建議。 我的代碼現在是:
#include <iostream>
using namespace std;
class class1
{
public:
void write(data &dataObject, int x)
{
dataObject.var = x;
}
};
class class2
{
public:
void read(data dataObject)
{
std::cout << dataObject.var << endl;
}
};
class data
{
public:
int var;
data()
{
var = 1;
}
};
int main()
{
data dataObject;
class1 object1;
class2 object2;
object2.read(dataObject);
object1.write(dataObject,2);
object2.read(dataObject);
return 0;
}
現在我得到了錯誤:
8錯誤:尚未聲明“數據”
10錯誤:請求'dataObject'中的成員'var',該成員是非類類型'int'
18錯誤:尚未聲明“數據”
20錯誤:請求'dataObject'中的成員'var',該成員是非類類型'int'
40錯誤:在此范圍內未聲明“ dataObject”
您在這里出錯的地方是:
void write(int x)
{
dataObject.var = x;
}
沒有dataObject
。 您試圖使您的類依賴於某些全局對象。 首先,您必須確定您是否真的想要這個。 而且,如果這樣做,則需要一種方法來確保在這些類被類使用之前,先聲明並實例化這些全局對象。
有許多種方法可以修復該錯誤,但是首先您需要清楚類要做什么以及它們之間應該如何交互。
一個無需全局對象即可解決此問題的示例:
class class1
{
public:
class1(data& dataObj) : dataRef_(dataObj) {}
void write(int x)
{
dataRef_.var = x;
}
private:
data& dataRef_;
};
然后在主要:
int main()
{
data dataObject;
class1 object1(dataObject);
object1.write(2);
}
您的班級不知道變量dataObject
。 如果希望他們能夠訪問類data
實例,則需要將它們傳遞給函數。 重新定義這樣的功能
void read(const data& dataObject)
{
std::cout << dataObject.var;
}
或在類中包含類data
的成員變量(如果希望這樣做)。 從設計的角度來看,您的類除了對類數據的實例進行操作外不做任何其他事情。 您可以將這兩個類合並為一個新類,該新類包含一個類data
對象作為成員變量。 您可以具有該新類的多個功能(讀/寫),以對內部data
成員進行修改/輸出。 擁有兩個單獨的類,其唯一目的是修改另一個不是成員變量的變量,這實際上沒有任何意義。
您正在將參數傳遞給成員函數read
和write
,但是這些函數未定義為接受參數。
將它們重新定義為:
// for class1:
void write(data &dataObject, int x)
{
dataObject.var = x;
}
// for class2:
void read(data dataObject)
{
std::cout << dataObject.var << endl;
}
此外,當您傳遞這些對象時,請勿在其前面加上data
類型:您已經聲明了變量,現在只需要:
int main()
{
data dataObject;
class1 object1;
class2 object2;
object2.read(dataObject);
object1.write(dataObject, 2);
object2.read(dataObject);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.