作者tropical72 (藍影)
看板C_and_CPP
標題[問題] const 二維指標陣列參數傳遞問題
時間Thu Jul 28 19:00:04 2011
這問題是在他版論壇裡,獲得原提問允許,轉至本版,
想請教各位先進、版大,對於此問題看法如何 (應有得討論),
不是很會敘述, 請看程式碼
---------
#include <string.h>
class Object{
public:
int value;
};
void f1( const Object * const obj[6] ){}
void f2( const Object * const obj[6][6]){}
int main()
{
Object *obj1[6];
f1( obj1 );
/* L1 */
// Visual C++ - error C2664:
// 無法將參數 1 從 'Object *[6][6]' 轉換成 'const Object *const [][6]
Object *obj2[6][6];
f2(obj2);
/* L2 - I know it's error...*/
typedef const Object* pObj[6][6];
f2((pObj)obj2);
/* L3 */
const Object *tmp[6][6];
memcpy(tmp, obj2, sizeof(Object)*36);
f2(tmp);
return 0;
}
-------
L1 的部份是錯誤訊息, 我模糊了為何不能過,
改成 const Object *obj2[6][6] 確實可以,
但以為 non-const 可以丟給 const做傳遞動作。
L2 部份是我的 trying,
我其實是想再 typedef pObj 成 const obj* [6][6],
再強制轉型, 這部份不知該如何下手
L3 這是原提問者用的想法、概念 (code依概念寫的)
想請問這問題,在不動 f2 情況下,obj2 該怎麼丟到 f2 執行?
謝謝各位不吝指教, 感激不盡!
--
YouLoveMe() ? LetItBe() : LetMeFree();
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 180.177.78.41
→ firejox:typedef Object* const pObj[6][6];? 07/28 19:06
→ tropical72:f 大的也試了,強制轉型也失敗了 XD 07/28 19:09
→ angleevil:看了編譯器給的意見.'Object* const [6][6]' 07/28 21:48
→ angleevil:好像是const pointer to Object[6][6],因此會出錯 07/28 21:50
→ angleevil:自己也不確定此說法可以嘛? 可能要其他人幫忙一下 07/28 21:55
→ akasan:看到這問題想到tinlans 之前的好文 #1B_2w2Uj 07/29 02:57
→ tropical72:真的是好文!!謝謝 akasan !! 07/29 03:27
→ Favonia:原來 FAQ 有... 早知道不要打這麼多字 xDDD 07/29 03:37
→ Favonia:上次翻 c-faq 也發現到很多好東西 :P 07/29 03:55