2014-06-29 193 views
-7

我收到了一個轉換錯誤,實際上並不知道如何解決它。C++轉換錯誤:從短int *無效轉換爲short int

我必須使用這些結構,並且不知道如何訪問Date結構權限。 這裏是我的代碼:從GCC

#include <iostream> 
#include <string.h> 

using namespace std; 


struct Date { 
short year; 
short month; 
short day; 
}; 

struct Stuff { 
    Date birth; 
}; 

struct ListElement { 
    struct Stuff* person;   // Pointer to struct Stuff 
    struct ListElement* next;  // Pointer to the next Element 
}; 

int main() { 
short birth_year; 
short birth_month; 
short birth_day; 
cin >> birth_year; 
cin >> birth_month; 
cin >> birth_day; 


ListElement* const start = new ListElement(); 
ListElement* actual = start; 

actual->person = new Stuff(); 
actual->person->birth.year = new short[sizeof(birth_year)]; // Conversion Error 

delete start; 
delete actual; 
} 

錯誤消息:

main.cpp: In function 'int main()': 
main.cpp:35:29: error: invalid conversion from 'short int*' to 'short int' [-fpermissive] 
    actual->person->birth.year = new short[sizeof(birth_year)]; // Conversion Error 
+0

錯誤信息在哪裏? – Deduplicator

+4

這段代碼沒有意義。你爲什麼試圖將一個數組分配給一個'short'? –

+0

[請詳細閱讀你的編譯器告訴你的內容](http://ideone.com/poCJJk)!你的標題是錯誤的。你不需要'new()'在那裏。 –

回答

3

您不能actual->person->birth.year分配內存,爲birth.year不是指針。

你可以用:actual->person->birth.year = 2014;
actual->person->birth.year = birth_year;

2

我認爲,你想要什麼,真正做的是這樣的:

actual->person->birth.year = birth_year;

如果我錯了,然後閱讀以下內容:

你有你的結構:

short year;

但您試圖將什麼新回報分配給year

你應該這樣做一個short* year;和動態處理它(永遠不會忘記取消分配它)!

1

yearshort,它是Date的直接成員。也就是說,如果您創建了一個Stuff對象,它包含birth,其中包含year。這些不需要手動分配,這就是你想要用new short[sizeof(birth_year)]做什麼。相反,你應該只給它分配一個值:

actual->person->birth.year = 1990; 

原因你的錯誤是new ...表達式返回一個指向他們所分配的對象。這意味着它給了你一個short*,然後你試圖存儲在short - 這是行不通的。

您遇到的另一個問題是new不能像malloc那樣工作。你只需要傳遞你想要的對象數量,而不是多少字節。如果你想要一個short,你只需要new short。如果你想要一組數字,比如說兩個short,你應該做new short[2]。請記住,動態分配的對象需要爲delete d - 對於動態分配的陣列,您需要使用delete[]來銷燬它。