2012-11-08 35 views
0

我有一個C++類FooCpp,一個C++接口的IFoo和對象 - 類FooObjC上的IFoo我有:的OBJ-C指針C++已經改變

public: 
    virtual ~IFOO() {}; 
    virtual void seePointer(FooCpp* p); 

上FooCpp我有:

上.H

class FooCpp : virtual public IFOO { 
public: 
    virtual ~FooCpp() {}; 
    void seePointer(FooCpp* p); 
} 

和.cpp

void FooCpp::seePointer(IFOO* p){ 
    printf("%p\n",p); 
} 

和FooObjC我把它叫做:

FooCpp *foo = new FooCpp(); 
FooCpp *f = new FooCpp(); 
printf("%p\n",f); 
foo->seePointer(f); 

,當我這個,我發現瞭如下日誌:

0x848f520 
0x61630002 

爲什麼點地址已更改?因爲我在我的程序中出現錯誤,有人知道爲什麼這個以及如何解決它?

+0

對我的作品當我執行你的代碼,我得到:'0x100109f30 0x100109f30'我可以上傳的地方項目,如果你喜歡你的問題不在於此 – trojanfoe

+0

這裏是我的工作項目:。HTTP: //dl.dropbox.com/u/18450868/CppTest.zip – trojanfoe

+0

@trojanfoe我會嘗試使用FooObjC.mm而不是FooObjC.m也許是這個因爲我使用.cpp和.m而不是.cpp和.mm – ademar111190

回答

0

基礎子對象與完整對象具有不同的地址並不罕見,尤其是涉及虛擬繼承時。

然而,這兩個指針之間的差異應該是小(小於sizeof (FooCpp)

要麼你已經有了某種腐敗(可能不匹配的調用約定)或其他的Objective-C++是做一些很奇怪的, 。像撕下代理對象