2012-02-19 97 views
-2

請運行該代碼,並解釋我爲什麼輸出是這樣的:錯誤輸出

table[0]=3 
table[1]=-858993567 
table[2]=4 
#include "stdafx.h" 
struct First 
{ 
    long data; 
}; 

struct Second : public First 
{ 
    char marker; 
}; 

void printTable(First *table, int length) 
{ 
    for (int i=0; i < length; ++i) 
    { 
        printf("table[%d]=%ld\n", i, table[i].data); 
    } 
}; 

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    Second myTable[3]; 
    myTable[0].marker='a'; 
    myTable[1].marker='b'; 
    myTable[2].marker='c'; 

    myTable[0].data=3; 
    myTable[1].data=4; 
    myTable[2].data=5; 

    printTable(myTable, 3); 
    return 0; 
} 

任何人都可以幫我嗎?

回答

2

函數需要的First陣列但傳遞的Second陣列。那根本行不通。

可以使用指針來基類傳遞一個單個派生的對象,而不是陣列。索引運算符[]需要知道對象的確切類型,以便能夠計算它們的位置。

+0

因此,對於類數組,我無法將其轉換爲基類?
因爲當我傳遞Second秒的單個對象時;
像printTable(&s, 1);
則一切正常;
Likon 2012-02-19 11:57:02

+0

的權利,你實際上是傳遞一個指向數組的第一個對象要找到下一個對象,函數需要知道確切類型(從而大小),否則找不到數組的第二個和第三個對象 – 2012-02-19 12:01:13

+0

謝謝,它可以幫助我。 – Likon 2012-02-19 12:07:44