簡體   English   中英

將對象傳遞給另一個類C ++中的函數

[英]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成員進行修改/輸出。 擁有兩個單獨的類,其唯一目的是修改另一個不是成員變量的變量,這實際上沒有任何意義。

您正在將參數傳遞給成員函數readwrite ,但是這些函數未定義為接受參數。

將它們重新定義為:

// 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM