作者tyc5116 (累人啊....)
看板C_and_CPP
標題Re: [問題] extern
時間Tue Nov 3 14:27:47 2009
※ 引述《Ebergies (火神)》之銘言:
: ※ 引述《tyc5116 (累人啊....)》之銘言:
: : 不好意思,再請問一下
: : gcroot我上MSDN查過,也測試過了,就如您所說的一樣
: : 只是只gcroot到另一個CPP檔了以後,Arraylist的[]功能就失去了
: : 顯示error C2676: 二元運算子 '[' : 'gcroot<T>'
: : 沒有定義此運算子或預先定義運算子可接受的型別轉換
: : 請問我還可以怎麼改??謝謝
: extern gcroot< ArrayList^> globalArray;
: void somefunction()
: {
: ArrayList ^clrArrayList= globalArray;
: // Now you know how to do
: }
不好意思,這部份還有一些問題,在windows form中,像這樣子
//T.h
class T{
public:
int a;
};
//Form1.h
#include "T.h"
const int value=10;
T T1[value];
//aaaaa.cpp
#include "Form1.h"
extern const int value;
//extern T T1[value];
會有錯
error LNK2005: "class T * T1" (?T1@@$$Q3PAVT@@A)
已在ProjectTest.obj 中定義過了
error LNK1169: 找到有一或多個已定義的符號
請問是為什麼??
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 163.18.48.28
推 QQ29:不就是你projectTest.cpp去include form.h了 T1就定義兩次拉 11/03 14:30
→ QQ29:你extern應該寫在form.h aaaaa.cpp寫定義 顛倒了 11/03 14:31
→ QQ29:而且你的form1.h定義int value=10 要是又有個cpp include這.h 11/03 14:32
→ QQ29:就會又造成重複定義了~ 你還是寫顛倒了 和aaaaa.cpp顛倒 11/03 14:32
→ tyc5116:可是我現在的情況,定義一定要寫在form1內耶 11/03 14:33
推 QQ29:為什麼一定要?? include form1.h後再對他定義就好啦@@ 11/03 14:35
→ tyc5116:還是一樣,剛試了一下,兩個顛倒,再加一個cpp放extern,錯誤 11/03 15:41
推 QQ29:重點就是卡在你.h為啥寫了定義 只要有兩個cpp都include他就 11/03 16:17
→ QQ29:鐵定重複定義~ 11/03 16:18
推 ledia:為什麼原 po 還要再加一個 cpp 呀? @@ 11/03 18:09
推 ledia:Form1.h 放 extern T T1[]; extern const int value; 11/03 18:13
→ ledia:aaaaa.cpp 放 const int value=10; T T1[value]; 就好啦 11/03 18:13
→ tyc5116:試了一下,好像有點心得了,謝謝大家 11/03 21:14