2017-04-07 103 views
0

我的需求是將相似的結構分配給另一個,只是名稱不同。 如果它的名字相同,我們可以直接使用=(賦值)。 我不想使用memcopy,因爲它會複製位。是否可以分配兩種不同類型的結構?

struct first{ 
int i; 
char c; 
} 
struct second{ 
int i; 
char c; 
//we can overload assignment operator to copy field. 
void operator = (struct first& f) 
    i=f.i; 
    c=f.c; 
} 

int main() 
{ 
    struct first f; 
    f.i=100; 
    f.c='a'; 
    struct second s=f; 
} 

但我得到編譯錯誤。 錯誤:請求從「第一個」轉換爲非標量類型「第二個」。

不確定是否有可能。

+1

在這裏,你不分配。您正在複製對象。所以複製構造函數需要 –

+0

初始化!=賦值。寫一個'second'的構造函數,將'first'作爲參數,或者寫一個轉換運算符,'second','first'。 –

+0

你可以使用cast-through-a-union成語,也可以確保編譯器不會做任何可能會破壞你的代碼的別名優化。或者只是memcpy,非常暴力。 –

回答

1

的用法如下。然後它會工作。或者創建複製構造函數。

#include <iostream> 
using namespace std; 

struct first{ 
int i; 
char c; 
}; 
struct second{ 
int i; 
char c; 
//we can overload assignment operator to copy field. 
void operator = (struct first& f) 
{ 
    i=f.i; 
    c=f.c; 
} 
}; 

int main() 
{ 
    struct first f; 
    f.i=100; 
    f.c='a'; 
    struct second s; 
    s=f; 
} 
5

你需要一個構造函數來使用

struct second s=f; 

如:

struct second{ 
    int i; 
    char c; 
    second(first const& f) : i(f.i), c(f.c) {} 

    ... 

}; 

要使用賦值運算符,使用:

second s; // No need to use struct in C++ 
s = f; 

順便說一句,一個合適的接口並執行operator=功能應該是:

second& operator=(first const& f) 
{ 
    i=f.i; 
    c=f.c; 
    return *this; 
} 
+0

感謝您的回覆。 我的不好,已經記住它是任務,但它的副本:)。 – user2761565

相關問題