2012-02-19 99 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