2015-06-09 59 views
-1

我需要從一個結構轉換到另一個類似的變量。 我正在測試這個有兩個整數的兩個結構的例子。如何從一個結構轉換爲不同的結構?

由於某些原因,它沒有正確分配,我相信它是發送一個本地副本,然後釋放?我究竟做錯了什麼?

謝謝!

#include <iostream> 
using namespace std; 


struct a 
{ 
    int x, y; 

    a(){} 

    a(int _x, int _y) 
    { 
     x = _x; 
     y = _y; 
    } 
}; 

struct b 
{ 
    int x, y; 

    b(){} 

    b(int _x, int _y) 
    { 
     x = _x; 
     y = _y; 
    } 

    b& operator=(const a& _a) 
    { 
     return b(_a.x, _a.y); 
    } 
}; 



int main() 
{ 
    a a_test(1,2); 
    b b_test; 

    b_test = a_test; 

    std::cout << "a: " << a_test.x << "," << a_test.y << endl; 
    std::cout << "b: " << b_test.x << "," << b_test.y << endl; 
    return 0; 
} 

回答

3
b& operator=(const a& _a) 
    { 
     return b(_a.x, _a.y); 
    } 

您正在創建的B A本地副本,並把它的迴歸。本地副本將在範圍的末尾銷燬。

你可能想要做什麼:

b& operator=(const a& _a) 
{ 
    x = _a.x; 
    y = _a.y; 
    return *this; 
} 

賦值運算符的點是一個新值分配給現有的對象。它是一個成員函數,因此它可以直接訪問對象內部。所以你可以改變它的成員並返回一個對自身的引用來啓用進一步的變化。

編輯解決問題的意見如何爲class a做同樣的:

您需要轉發聲明B類。您還需要將頭文件和源文件之間的聲明和定義分開,因爲當您編寫定義時,編譯器需要知道如何使用這個定義。

在頭

class b; 

struct a 
{ 
    int x, y; 

    a(){} 

    a(int _x, int _y) 
    { 
     x = _x; 
     y = _y; 
    } 

    a& operator=(const b& _b); 
}; 

在CPP

a& a::operator=(const b& _b) 
{ 
    x = _b.x; 
    y = _b.y; 
    return *this; 
} 
+0

快速的問題。我該如何去做相同的結構a(因爲尚未宣佈b)?丹科! – user2122589

+1

@ user2122589我已經編輯了答案並回答了你的問題。 – rozina