Re: [問題] 在Visual C++用extern
看板C_and_CPP (C/C++)作者james732 (好人超)時間15年前 (2011/06/22 16:58)推噓10(10推 0噓 21→)留言31則, 11人參與討論串2/2 (看更多)
※ 引述《chenroseyaks (小盜)》之銘言:
: 開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
: Visul C++
: 問題(Question):
: 使用extern的時候一直出現無法解析外部符號, 但我已經有include需要的.cpp檔了
: 程式碼(Code):(請善用置底文網頁, 記得排版)
: 在B.cpp中的宣告:
: typedef struct A{
: ......
: }A;
: --------------------------
: 在test.cpp中使用:
: 宣告: extern struct A a; //struct A是在B.cpp檔中
: 呼叫: func(a);
比較正確的寫法
A.h
typedef struct A {
// ....
}A;
A.cpp
#include "A.h"
struct A a;
test.cpp
#include "A.h"
extern struct A a;
void func(struct A a) {
// ....
}
int main() {
func(a);
}
---------------
還有很多種改法就是了......
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.117.171.46
→
06/22 16:59, , 1F
06/22 16:59, 1F
→
06/22 17:00, , 2F
06/22 17:00, 2F
如你所說,把 struct A 改成 A 的話是沒有錯的
不過這個跟「extern」與「無法解析外部符號」這個問題無關
所以我就保留原程式碼的寫法了
※ 編輯: james732 來自: 140.117.171.46 (06/22 17:02)
推
06/22 17:03, , 3F
06/22 17:03, 3F
→
06/22 17:05, , 4F
06/22 17:05, 4F
推
06/22 17:06, , 5F
06/22 17:06, 5F
→
06/22 17:08, , 6F
06/22 17:08, 6F
→
06/22 17:09, , 7F
06/22 17:09, 7F
→
06/22 17:09, , 8F
06/22 17:09, 8F
→
06/22 17:10, , 9F
06/22 17:10, 9F
→
06/22 17:11, , 10F
06/22 17:11, 10F
→
06/22 17:14, , 11F
06/22 17:14, 11F
→
06/22 18:06, , 12F
06/22 18:06, 12F
→
06/22 18:57, , 13F
06/22 18:57, 13F
→
06/22 19:06, , 14F
06/22 19:06, 14F
推
06/22 19:15, , 15F
06/22 19:15, 15F
→
06/22 19:22, , 16F
06/22 19:22, 16F
推
06/22 20:22, , 17F
06/22 20:22, 17F
→
06/22 20:59, , 18F
06/22 20:59, 18F
→
06/22 21:04, , 19F
06/22 21:04, 19F
推
06/22 21:26, , 20F
06/22 21:26, 20F
→
06/22 21:28, , 21F
06/22 21:28, 21F
→
06/22 21:34, , 22F
06/22 21:34, 22F
推
06/22 21:51, , 23F
06/22 21:51, 23F
推
06/22 21:55, , 24F
06/22 21:55, 24F
struct A { ... };
typedef struct B { ... } B;
int main()
{
struct A a1; // C & C++ 寫這樣都可以
struct B b1; // C & C++ 寫這樣都可以
A a2; // 在沒有 typedef 的情況,C不能省略 struct,但C++可以
B b2; // 因為有 typedef,C & C++ 寫這樣都可以
}
※ 編輯: james732 來自: 140.117.171.46 (06/22 21:58)
→
06/22 21:57, , 25F
06/22 21:57, 25F
→
06/22 21:58, , 26F
06/22 21:58, 26F
完全是兩回事,extern 跟 typedef 並沒有什麼關聯。
這篇文裡面,在 A.cpp 裡面寫了 struct A a;
如果要在 main.cpp 裡面使用 A.cpp 裡的這個 a
就需要寫 extern struct A a;
代表這個 a 屬於別的外部檔案,而不是在 main.cpp 裡面
如果 main.cpp 裡面只寫了 struct A a; (沒有 extern 的話)
這樣就會再度宣告另一個 a 變數
連結的時候會出現重覆定義(A.cpp 與 main.cpp 都有個 a, 這樣是不可以的)
※ 編輯: james732 來自: 140.117.171.46 (06/22 22:02)
推
06/22 22:01, , 27F
06/22 22:01, 27F
※ 編輯: james732 來自: 140.117.171.46 (06/22 22:02)
推
06/22 22:05, , 28F
06/22 22:05, 28F
→
06/22 22:07, , 29F
06/22 22:07, 29F
是啊,在C++裡面,那個 struct 是可以省略掉的
在 C 裡面只要有 typedef,也可以省略掉 struct
※ 編輯: james732 來自: 140.117.171.46 (06/22 22:08)
→
06/22 22:10, , 30F
06/22 22:10, 30F
推
06/23 09:06, , 31F
06/23 09:06, 31F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章