討論區快速選單
知識庫快速選單
討論區最近新進100則主題 CSSLP認證,將資安落實在軟體開發中
[ 回上頁 ] [ 討論區發言規則 ]
有關string 全域變數...
更改我的閱讀文章字型大小
作者 : davidlsj(大胃)
[ 貼文 25 | 人氣 1370 | 評價 0 | 評價/貼文 0 | 送出評價 2 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2014/8/14 下午 06:27:27
Hello, 各位大大

小弟是使用vs 2008 windows form , 我在int main(......) 前定義了一個string的變數為全域變數,
但系統跟我說不能compiler , 可是同樣的方式我使用int or char卻沒有問題, 請問要如何宣告?

另,如不可的話, 是否有其它的方式可以達成?

Thanks ~
作者 : sflam(Raymond)討論區板主 Visual C++ .NET卓越專家VC++一代宗師新手入門優秀好手資訊類作業求救頂尖高手C++一代宗師貼文超過4000則
[ 貼文 4945 | 人氣 9172 | 評價 32290 | 評價/貼文 6.53 | 送出評價 142 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2014/8/14 下午 08:00:00
把完整程式碼貼出來.
作者 : davidlsj(大胃)
[ 貼文 25 | 人氣 1370 | 評價 0 | 評價/貼文 0 | 送出評價 2 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2014/8/18 下午 02:39:02
程式段如下所示...........................................


// RUNIN_TEST.cpp: 主要專案檔。

#include "stdafx.h"
#include <wbemidl.h>
#include <lmcons.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <io.h>
#include <fcntl.h>
#include <math.h>
#include <ctype.h>
#include <stdarg.h>
#include <winsock.h>
#include <shellapi.h>

#include "Vargroups.h"
#include "frmMainMenu.h"

 String PLSourcePath; // Content Preload的來源路徑.

using namespace KDI_RUNIN_TEST;

[STAThreadAttribute]
int main(array<System::String ^> ^args)
{
// 建立任何控制項之前,先啟用 Windows XP 視覺化效果
Application::EnableVisualStyles();
Application::SetCompatibleTextRenderingDefault(false);

// 建立主視窗並執行
Application::Run(gcnew Form1());
return 0;
}

//=========================================================================================
// MainMenu Form Crative.
//=========================================================================================
private: System::Void Form1_Load(System::Object^ sender, System::EventArgs^ e) {
 

PLSourcePath="aa";

 // MessageBox::Show("哈囉==>"+System::Windows::Forms::Application::StartupPath);
 / MessageBox::Show("哈囉==>"+PLSourcePath);
// read(System::Windows::Forms::Application::StartupPath,SysPath,1024)

};
作者 : davidlsj(大胃)
[ 貼文 25 | 人氣 1370 | 評價 0 | 評價/貼文 0 | 送出評價 2 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2014/8/18 下午 02:43:16
Sorry, 再補上Error Message ....
另如果將String奱數移除後, 即可compiler~

Thanks


1>------ 已開始建置: 專案 :RUNIN_TEST, 組態: Release Win32 ------
1>正在編譯...
1>KDI_RUNIN_TEST.cpp
1>d:\david_pgmarea\vc_area\runin_test\kdi_runin_test\frmMainMenu.h(1676) : error C2065: 'PLSourcePath' : 未宣告的識別項
1>d:\david_pgmarea\vc_area\runin_test\kdi_runin_test\frmMainMenu.h(1679) : error C2143: 語法錯誤 : 遺漏 ';' (在 '/' 之前)
1>.\RUNIN_TEST.cpp(20) : error C2146: 語法錯誤 : 遺漏 ';' (在識別項 'PLSourcePath' 之前)
1>.\RUNIN_TEST.cpp(20) : error C4430: 遺漏型別規範 - 假設為 int。注意: C++ 不支援 default-int
1>.\RUNIN_TEST.cpp(20) : error C4430: 遺漏型別規範 - 假設為 int。注意: C++ 不支援 default-int
1>已將建置記錄儲存於 "file://d:\David_PGMArea\VC_Area\RUNIN_TEST\RUNIN_TEST\Release\BuildLog.htm"
1>RUNIN_TEST - 5 個錯誤,0 個警告
========== 建置: 0 成功、1 失敗、0 最新、0 略過 ==========
作者 : sflam(Raymond)討論區板主 Visual C++ .NET卓越專家VC++一代宗師新手入門優秀好手資訊類作業求救頂尖高手C++一代宗師貼文超過4000則
[ 貼文 4945 | 人氣 9172 | 評價 32290 | 評價/貼文 6.53 | 送出評價 142 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2014/8/18 下午 08:18:57
> String PLSourcePath;

你要用的是 C++ 標準函式庫內的 std::string 還是 .NET 內定義的 System::String?

如要用的是 std::string, 你需要 #include <string>:
  #include <string>
  ...
  std::string PLSourcePath;

如要用的是 System::String, 你需要寫 System::String, 或用 using System::String.
  System::String PLSourcePath;
或:
  using System::String;
  ...
  String PLSourcePath;


看看你自己的 main() 參數是怎麼用 String 的:
  int main(array<System::String ^> ^args)
你也是用 "System::String" 的, 不是嗎?

作者 : davidlsj(大胃)
[ 貼文 25 | 人氣 1370 | 評價 0 | 評價/貼文 0 | 送出評價 2 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2014/8/19 下午 05:54:47
Hello, 大大

我使用了你所指導的方向, 但還是異常, 不知是那兒沒設定到....>_<....
, 再請大大指導一下囉!!

######################################################
方向一:
============================================================
設入#include <string.h>, 而後使用std::String PLSourcePath;
============================================================
// KDI_RUNIN_TEST.cpp: 主要專案檔。

#include "stdafx.h"
#include <wbemidl.h>
#include <lmcons.h>
#include <string.h>

#include "Vargroups.h"
#include "frmMainMenu.h"

std::String PLSourcePath; // Content Preload的來源路徑.

using namespace KDI_RUNIN_TEST;

[STAThreadAttribute]


int main(array<System::String ^> ^args)
{
.......

============================================================
錯誤訊息..
============================================================
1>------ 已開始建置: 專案: KDI_RUNIN_TEST, 組態: Release Win32 ------
1>正在編譯...
1>KDI_RUNIN_TEST.cpp
1>d:\david_pgmarea\vc_area\kdi_runin_test\kdi_runin_test\frmMainMenu.h(1676) : error C2065: 'PLSourcePath' : 未宣告的識別項
1>d:\david_pgmarea\vc_area\kdi_runin_test\kdi_runin_test\frmMainMenu.h(1679) : error C2065: 'PLSourcePath' : 未宣告的識別項
1>.\KDI_RUNIN_TEST.cpp(11) : error C2653: 'std' : 不是類別或命名空間名稱
1>.\KDI_RUNIN_TEST.cpp(11) : error C2146: 語法錯誤 : 遺漏 ';' (在識別項 'PLSourcePath' 之前)
1>.\KDI_RUNIN_TEST.cpp(11) : error C4430: 遺漏型別規範 - 假設為 int。注意: C++ 不支援 default-int
1>.\KDI_RUNIN_TEST.cpp(11) : error C4430: 遺漏型別規範 - 假設為 int。注意: C++ 不支援 default-int
1>已將建置記錄儲存於 "file://d:\David_PGMArea\VC_Area\KDI_RUNIN_TEST\KDI_RUNIN_TEST\Release\BuildLog.htm"
1>KDI_RUNIN_TEST - 6 個錯誤,0 個警告
========== 建置: 0 成功、1 失敗、0 最新、0 略過 ==========

######################################################
方向二:
============================================================
加入System::宣告
============================================================
// KDI_RUNIN_TEST.cpp: 主要專案檔。

#include "stdafx.h"
#include <wbemidl.h>
#include <lmcons.h>
#include <string.h>

#include "Vargroups.h"
#include "frmMainMenu.h"

System::String PLSourcePath; // Content Preload的來源路徑.

using namespace KDI_RUNIN_TEST;

[STAThreadAttribute]


int main(array<System::String ^> ^args)
{
.......................
============================================================
錯誤訊息..
============================================================
1>------ 已開始建置: 專案: KDI_RUNIN_TEST, 組態: Release Win32 ------
1>正在編譯...
1>KDI_RUNIN_TEST.cpp
1>d:\david_pgmarea\vc_area\kdi_runin_test\kdi_runin_test\frmMainMenu.h(1676) : error C2065: 'PLSourcePath' : 未宣告的識別項
1>d:\david_pgmarea\vc_area\kdi_runin_test\kdi_runin_test\frmMainMenu.h(1679) : error C2065: 'PLSourcePath' : 未宣告的識別項
1>.\KDI_RUNIN_TEST.cpp(11) : error C3149: 'System::String' : 沒有最上層 '^' 無法在這裡使用這個型別
1>.\KDI_RUNIN_TEST.cpp(11) : error C3145: 'PLSourcePath' : 全域或靜態變數不能有 Managed 型別 'System::String ^'
1> 不可宣告全域或靜態變數,或參考 gc 堆積中其他物件的原生型別的成員
1>已將建置記錄儲存於 "file://d:\David_PGMArea\VC_Area\KDI_RUNIN_TEST\KDI_RUNIN_TEST\Release\BuildLog.htm"
1>KDI_RUNIN_TEST - 4 個錯誤,0 個警告
========== 建置: 0 成功、1 失敗、0 最新、0 略過 ==========
作者 : sflam(Raymond)討論區板主 Visual C++ .NET卓越專家VC++一代宗師新手入門優秀好手資訊類作業求救頂尖高手C++一代宗師貼文超過4000則
[ 貼文 4945 | 人氣 9172 | 評價 32290 | 評價/貼文 6.53 | 送出評價 142 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2014/8/19 下午 10:40:34
>######################################################
>方向一:
>============================================================
>設入#include <string.h>, 而後使用std::String PLSourcePath;

<string.h> 是 C 語言的標準函式檔, 裡面存的是 C 語言字串處理函式的宣告 (如 strcpy), 不是 C++ 的 string class. C++ string class 的頭檔是 <string>, 它沒有 file extension. 所有 C++ 標準函式庫的頭檔都沒有 file extension.

而且 C++ 標準函式檔內的所有名字全都是小寫. 正確的寫法是:

  #include <string>
  ...
  std::string PLSourcePath;


>方向二:
>============================================================
>加入System::宣告
>============================================================
>System::String PLSourcePath; // Content Preload的來源路徑.
>1>.\KDI_RUNIN_TEST.cpp(11) : error C3149: "System::String" : 沒有最上層 "^" 無法在這裡使用這個型別
>1>.\KDI_RUNIN_TEST.cpp(11) : error C3145: "PLSourcePath" : 全域或靜態變數不能有 Managed 型別 "System::String ^"
>1> 不可宣告全域或靜態變數,或參考 gc 堆積中其他物件的原生型別的成員>using namespace KDI_RUNIN_TEST;

System::String 是個 ref class, 所以 PLSourcePath 是個 managed 物件. 上面兩個錯誤訊息講的就是使用 C++/CLI .NET 物件的規則:
  - 定義 managed 物件必須用 ^.
  - Managed 物件不能是 global.
(我之前的回覆也犯了這個錯誤, 不好意思)

作者 : davidlsj(大胃)
[ 貼文 25 | 人氣 1370 | 評價 0 | 評價/貼文 0 | 送出評價 2 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2014/8/20 上午 10:51:00

Hello, 大大

如下所示, 改了之後, 還是無法編譯耶~....>_<....


====================================================
程式段 :
====================================================
#include <wbemidl.h>
#include <lmcons.h>
#include <string>

#include "Vargroups.h"
#include "frmMainMenu.h"

std::string PLSourcePath; // Content Preload的來源路徑.

using namespace KDI_RUNIN_TEST;

====================================================
Error Message :
====================================================
1>------ 已開始建置: 專案: KDI_RUNIN_TEST, 組態: Release Win32 ------
1>正在編譯...
1>KDI_RUNIN_TEST.cpp
1>d:\david_pgmarea\vc_area\kdi_runin_test\kdi_runin_test\frmMainMenu.h(1676) : error C2065: 'PLSourcePath' : 未宣告的識別項
1>d:\david_pgmarea\vc_area\kdi_runin_test\kdi_runin_test\frmMainMenu.h(1679) : error C2065: 'PLSourcePath' : 未宣告的識別項
1>已將建置記錄儲存於 "file://d:\David_PGMArea\VC_Area\KDI_RUNIN_TEST\KDI_RUNIN_TEST\Release\BuildLog.htm"
1>KDI_RUNIN_TEST - 2 個錯誤,0 個警告
========== 建置: 0 成功、1 失敗、0 最新、0 略過 ==========
作者 : davidlsj(大胃)
[ 貼文 25 | 人氣 1370 | 評價 0 | 評價/貼文 0 | 送出評價 2 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2014/8/20 上午 10:57:39

Hello, 大大

如下所示, 改了之後, 還是無法編譯耶~....>_<....


====================================================
程式段 :
====================================================
#include <wbemidl.h>
#include <lmcons.h>
#include <string>

#include "Vargroups.h"
#include "frmMainMenu.h"

std::string PLSourcePath; // Content Preload的來源路徑.

using namespace KDI_RUNIN_TEST;

====================================================
Error Message :
====================================================
1>------ 已開始建置: 專案: KDI_RUNIN_TEST, 組態: Release Win32 ------
1>正在編譯...
1>KDI_RUNIN_TEST.cpp
1>d:\david_pgmarea\vc_area\kdi_runin_test\kdi_runin_test\frmMainMenu.h(1676) : error C2065: 'PLSourcePath' : 未宣告的識別項
1>d:\david_pgmarea\vc_area\kdi_runin_test\kdi_runin_test\frmMainMenu.h(1679) : error C2065: 'PLSourcePath' : 未宣告的識別項
1>已將建置記錄儲存於 "file://d:\David_PGMArea\VC_Area\KDI_RUNIN_TEST\KDI_RUNIN_TEST\Release\BuildLog.htm"
1>KDI_RUNIN_TEST - 2 個錯誤,0 個警告
========== 建置: 0 成功、1 失敗、0 最新、0 略過 ==========
作者 : sflam(Raymond)討論區板主 Visual C++ .NET卓越專家VC++一代宗師新手入門優秀好手資訊類作業求救頂尖高手C++一代宗師貼文超過4000則
[ 貼文 4945 | 人氣 9172 | 評價 32290 | 評價/貼文 6.53 | 送出評價 142 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2014/8/20 上午 11:21:07
>====================================================
>Error Message :
>====================================================
>1>------ 已開始建置: 專案: KDI_RUNIN_TEST, 組態: Release Win32 ------
>1>正在編譯...
>1>KDI_RUNIN_TEST.cpp
>1>d:\david_pgmarea\vc_area\kdi_runin_test\kdi_runin_test\frmMainMenu.h(1676) : error C2065: 'PLSourcePath' : 未宣告的識別項
>1>d:\david_pgmarea\vc_area\kdi_runin_test\kdi_runin_test\frmMainMenu.h(1679) : error C2065: 'PLSourcePath' : 未宣告的識別項
>1>已將建置記錄儲存於

你有發現到錯誤不在上面的這個 .cpp 檔了嗎?
錯誤分別在 frmMainMenu.h 的 1676 行跟 1679 行.

作者 : davidlsj(大胃)
[ 貼文 25 | 人氣 1370 | 評價 0 | 評價/貼文 0 | 送出評價 2 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2014/8/20 上午 11:40:42
Hello, 大大

如下所示, 將變數宣告放置在 "frmMainMenu.h"後, 又另一個問題產生!!

=============================================
程式段:
=============================================
// KDI_RUNIN_TEST.cpp: 主要專案檔。

#include "stdafx.h"
#include <wbemidl.h>
#include <lmcons.h>
#include <string>

std::string PLSourcePath; // Content Preload的來源路徑.

#include "Vargroups.h"
#include "frmMainMenu.h"


using namespace KDI_RUNIN_TEST;

[STAThreadAttribute]

=============================================
Error Message :
=============================================
1>------ 已開始建置: 專案: KDI_RUNIN_TEST, 組態: Release Win32 ------
1>正在編譯...
1>KDI_RUNIN_TEST.cpp
1>d:\david_pgmarea\vc_area\kdi_runin_test\kdi_runin_test\frmMainMenu.h(1679) : error C2665: 'System::Windows::Forms::MessageBox::Show' : 沒有任何 21 多載可以轉換所有引數型別
1> c:\windows\microsoft.net\framework\v2.0.50727\system.windows.forms.dll: 可能是 'System::Windows::Forms::DialogResult System::Windows::Forms::MessageBox::Show(System::String ^)'
1> 當嘗試符合引數清單 '(std::basic_string<_Elem,_Traits,_Ax>)' 時
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>,
1> _Ax=std::allocator<char>
1> ]
1>已將建置記錄儲存於 "file://d:\David_PGMArea\VC_Area\KDI_RUNIN_TEST\KDI_RUNIN_TEST\Release\BuildLog.htm"
1>KDI_RUNIN_TEST - 1 個錯誤,0 個警告
========== 建置: 0 成功、1 失敗、0 最新、0 略過 ==========
作者 : sflam(Raymond)討論區板主 Visual C++ .NET卓越專家VC++一代宗師新手入門優秀好手資訊類作業求救頂尖高手C++一代宗師貼文超過4000則
[ 貼文 4945 | 人氣 9172 | 評價 32290 | 評價/貼文 6.53 | 送出評價 142 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2014/8/20 下午 09:59:07
>如下所示, 將變數宣告放置在 'frmMainMenu.h'後, 又另一個問題產生!!
>
>=============================================
>程式段:
>=============================================
>// KDI_RUNIN_TEST.cpp: 主要專案檔。
>
>#include "stdafx.h"
>#include <wbemidl.h>
>#include <lmcons.h>
>#include <string>
>
>std::string PLSourcePath; // Content Preload的來源路徑.
>
>#include "Vargroups.h"
>#include "frmMainMenu.h"

之前說問題在 frmMainMenu.h 的意思是: 這個 .h 檔有問題, 要從根本上來解決, 你應該把這個 .h 檔的內容貼出來.

在沒有看到 frmMainMenu.h 原始碼的情況下, 只能從錯誤訊息上來猜測. 最大的可能性是 frmMainMenu.h 內在沒有定義/宣告的情況下用了這個名字 PLSourcePath.

Global 物件只能有一個 _定義_, 一般的習慣是放在 .cpp 檔裡. 這個你已經有了, 在 KDI_RUNIN_TEST.cpp 裡. 任何其它需要這個物件的地方, 不管是其它 .cpp 檔或是 .h 檔, 你都需要在使用前 _宣告_ 這個名字, 告訴編譯器它的類型, 當然, 不要忘了所需的頭檔:
  #include <string>
  ...
  extern std::string PLSourcePath;
  ...


>=============================================
>Error Message :
>=============================================
>1>------ 已開始建置: 專案: KDI_RUNIN_TEST, 組態: Release Win32 ------
>1>正在編譯...
>1>KDI_RUNIN_TEST.cpp
>1>d:\david_pgmarea\vc_area\kdi_runin_test\kdi_runin_test\frmMainMenu.h(1679) : error C2665: 'System::Windows::Forms::MessageBox::Show' : 沒有任何 21 多載可以轉換所有引數型別
>1> c:\windows\microsoft.net\framework\v2.0.50727\system.windows.forms.dll: 可能是
'System::Windows::Forms::DialogResult System::Windows::Forms::MessageBox::Show(System::String ^)'
>1> 當嘗試符合引數清單 '(std::basic_string<_Elem,_Traits,_Ax>)' 時
>1> with
>1> [
>1> _Elem=char,
>1> _Traits=std::char_traits<char>,
>1> _Ax=std::allocator<char>
>1> ]

這個錯誤跟之前的沒有關係. *::MessageBox::Show() 是 .NET 的函式, 它有數個多載, 但所有字串類型的參數都是 System::String. 但你給的相關參數類型是 std::string. std::string 不等於 System::String, .NET 也沒有能夠直接把 std::string 轉換成 System::String 的方法. 你必須間接
轉換, 先把 std::string 轉成 const char*, 然後再把 const char* 轉成 System::String. 至少有兩個方法:
[方法一: gcnew]
  MessageBox::Show(gcnew System::String(PLSourcePath.c_str()));

[方法二: marshal_as]
  #include <msclr/marshal_cppstd.h>
  ...
  MessageBox::Show(msclr::interop::marshal_as<System::String^>(PLSourcePath));

作者 : davidlsj(大胃)
[ 貼文 25 | 人氣 1370 | 評價 0 | 評價/貼文 0 | 送出評價 2 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2014/8/21 上午 09:41:47
Hello, 大大

使用了"extern std::string PLSourcePath;"還是一樣的問題, 是的, 就是因為不只一個涵數要使用, 所以才想將其變為全域式的變數,
先前在BCB6可以的語法(String PLSourcePath;) , 在這兒完全不行, 希望大大的指導~謝謝~

===================================================
.cpp file
===================================================
// KDI_RUNIN_TEST.cpp: 主要專案檔。

#include "stdafx.h"
#include <wbemidl.h>
#include <lmcons.h>
#include <string>


extern std::string PLSourcePath; // Content Preload的來源路徑.

#include "Vargroups.h"
#include "frmMainMenu.h"


using namespace KDI_RUNIN_TEST;
............

===================================================
.h file
===================================================
#pragma once

namespace KDI_RUNIN_TEST {

using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;

/// <summary>
/// Form1 的摘要
///
/// 警告: 如果您變更這個類別的名稱,就必須變更與這個類別所依據之所有 .resx 檔案關聯的
/// Managed 資源編譯器工具的 'Resource File Name' 屬性。
/// 否則,這些設計工具
/// 將無法與這個表單關聯的當地語系化資源
/// 正確互動。
/// </summary>
public ref class Form1 : public System::Windows::Forms::Form
{
public:
Form1(void)
{

InitializeComponent();
//
//TODO: 在此加入建構函式程式碼
//
}

protected:
/// <summary>
/// 清除任何使用中的資源。
/// </summary>
~Form1()
{
if (components)
{
delete components;
}
}

protected:

     (元件宣告) ........................................

     (元件定義) ........................................

//=========================================================================================
// MainMenu Form Crative.
//=========================================================================================
private: System::Void Form1_Load(System::Object^ sender, System::EventArgs^ e) {
 
String^ VCNewLine = "\r\n"; //字串換行
String^ VCEmpty=" ";
char tempwrd[200]={0};
     int ScreenX, ScreenY;

PLSourcePath="aa";

     MessageBox::Show("哈囉==>"+PLSourcePath);

  }
     };

}
作者 : sflam(Raymond)討論區板主 Visual C++ .NET卓越專家VC++一代宗師新手入門優秀好手資訊類作業求救頂尖高手C++一代宗師貼文超過4000則
[ 貼文 4945 | 人氣 9172 | 評價 32290 | 評價/貼文 6.53 | 送出評價 142 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2014/8/21 上午 11:23:26
>使用了'extern std::string PLSourcePath;'還是一樣的問題, 是的, 就是因為不只一個涵數要使用, 所以才想將其變為全域式的變數,

如果你 PLSourcePath 的使用對像都是 .NET 的函式, 那你還是用 System::String 做為它的類型.
雖然 managed 物件不能是 global, 但有其解決的方法, 就是用一個 ref class 來包:
  [Globals.h]
  ref class Globals
  {
  public:
    static System::String^ PLSourcePath;
  };

在需要 PLSourcePath 的地方 #include "Globals.h", 使用時用 Globals::PLSourcePath

>先前在BCB6可以的語法(String PLSourcePath;) , 在這兒完全不行, 希望大大的指導~謝謝~

BCB6 的 String 跟 .NET 的 String 是兩個完全不同的東西.
作者 : davidlsj(大胃)
[ 貼文 25 | 人氣 1370 | 評價 0 | 評價/貼文 0 | 送出評價 2 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2014/8/21 上午 11:54:27
Hello,大大

我新增了一個"Globals.h" file ,將其#include"Globals.h" file include 無論是在.cpp, 或是.h file 裡, 都還是Fail!!


ps. 變數用是Globals::PLSourcePath="aa";


======================================================
Error Message :
======================================================

 1>------ 已開始建置: 專案: KDI_RUNIN_TEST, 組態: Release Win32 ------
1>正在編譯...
1>KDI_RUNIN_TEST.cpp
1>d:\david_pgmarea\vc_area\kdi_runin_test\kdi_runin_test\Globals.h(1) : error C3872: '0x3000': 不能在識別項中使用這個字元
1>d:\david_pgmarea\vc_area\kdi_runin_test\kdi_runin_test\Globals.h(1) : error C3872: '0x3000': 不能在識別項中使用這個字元
1>d:\david_pgmarea\vc_area\kdi_runin_test\kdi_runin_test\Globals.h(2) : error C3872: '0x3000': 不能在識別項中使用這個字元
1>d:\david_pgmarea\vc_area\kdi_runin_test\kdi_runin_test\Globals.h(2) : error C3872: '0x3000': 不能在識別項中使用這個字元
1>d:\david_pgmarea\vc_area\kdi_runin_test\kdi_runin_test\Globals.h(2) : error C2144: 語法錯誤 : 'Globals' 必須在 ';' 之後
1>d:\david_pgmarea\vc_area\kdi_runin_test\kdi_runin_test\Globals.h(2) : error C4430: 遺漏型別規範 - 假設為 int。注意: C++ 不支援 default-int
1>d:\david_pgmarea\vc_area\kdi_runin_test\kdi_runin_test\Globals.h(2) : error C2470: '  ' : 類似函式定義,但沒有型式參數清單,正略過程式主體
1>d:\david_pgmarea\vc_area\kdi_runin_test\kdi_runin_test\Globals.h(3) : error C3872: '0x3000': 不能在識別項中使用這個字元
1>d:\david_pgmarea\vc_area\kdi_runin_test\kdi_runin_test\Globals.h(3) : error C3872: '0x3000': 不能在識別項中使用這個字元
1>d:\david_pgmarea\vc_area\kdi_runin_test\kdi_runin_test\Globals.h(4) : error C3872: '0x3000': 不能在識別項中使用這個字元
1>d:\david_pgmarea\vc_area\kdi_runin_test\kdi_runin_test\Globals.h(4) : error C3872: '0x3000': 不能在識別項中使用這個字元
1>d:\david_pgmarea\vc_area\kdi_runin_test\kdi_runin_test\Globals.h(4) : error C3872: '0x3000': 不能在識別項中使用這個字元
1>d:\david_pgmarea\vc_area\kdi_runin_test\kdi_runin_test\Globals.h(4) : error C3872: '0x3000': 不能在識別項中使用這個字元
1>d:\david_pgmarea\vc_area\kdi_runin_test\kdi_runin_test\Globals.h(5) : error C3872: '0x3000': 不能在識別項中使用這個字元
1>d:\david_pgmarea\vc_area\kdi_runin_test\kdi_runin_test\Globals.h(5) : error C3872: '0x3000': 不能在識別項中使用這個字元
1>d:\david_pgmarea\vc_area\kdi_runin_test\kdi_runin_test\frmMainMenu.h(1679) : error C2027: 使用未定義型別 'Globals'
1> d:\david_pgmarea\vc_area\kdi_runin_test\kdi_runin_test\Globals.h(2) : 請參閱 'Globals' 的宣告
1>d:\david_pgmarea\vc_area\kdi_runin_test\kdi_runin_test\frmMainMenu.h(1679) : error C2065: 'PLSourcePath' : 未宣告的識別項
1>d:\david_pgmarea\vc_area\kdi_runin_test\kdi_runin_test\frmMainMenu.h(1682) : error C2027: 使用未定義型別 'Globals'
1> d:\david_pgmarea\vc_area\kdi_runin_test\kdi_runin_test\Globals.h(2) : 請參閱 'Globals' 的宣告
1>d:\david_pgmarea\vc_area\kdi_runin_test\kdi_runin_test\frmMainMenu.h(1682) : error C2065: 'PLSourcePath' : 未宣告的識別項
1>已將建置記錄儲存於 "file://d:\David_PGMArea\VC_Area\KDI_RUNIN_TEST\KDI_RUNIN_TEST\Release\BuildLog.htm"
1>KDI_RUNIN_TEST - 19 個錯誤,0 個警告
========== 建置: 0 成功、1 失敗、0 最新、0 略過 ==========
作者 : sflam(Raymond)討論區板主 Visual C++ .NET卓越專家VC++一代宗師新手入門優秀好手資訊類作業求救頂尖高手C++一代宗師貼文超過4000則
[ 貼文 4945 | 人氣 9172 | 評價 32290 | 評價/貼文 6.53 | 送出評價 142 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2014/8/21 下午 12:08:45
因為本討論區沒有 code block, 無法格式化原始碼, 所以我貼程式碼的時候, 會用「全形空格」來 indent. 編譯器無法編譯全形空格, 你自己必須把它們用普通的空格來取代.

不能直接 cut and paste.
作者 : davidlsj(大胃)
[ 貼文 25 | 人氣 1370 | 評價 0 | 評價/貼文 0 | 送出評價 2 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2014/8/21 下午 02:54:05
Hello, 大大

可以了, 這一次真的穫益良多, 謝謝你的指導~...^_^...
Very thanks ~

 板主 : 徵求中
 > Microsoft Visual Studio 2008 - 討論區
 - 最近熱門問答精華集
 - 全部歷史問答精華集
 - Microsoft Visual Studio 2008 - 知識庫
  ■ 全站最新Post列表
  ■ 我的文章收藏
  ■ 我最愛的作者
  ■ 全站文章收藏排行榜
  ■ 全站最愛作者排行榜
  ■  月熱門主題
  ■  季熱門主題
  ■  熱門主題Top 20
  ■  本區Post排行榜
  ■  本區評價排行榜
  ■  全站專家名人榜
  ■  全站Post排行榜
  ■  全站評價排行榜
  ■  全站人氣排行榜
 請輸入關鍵字 
  開始搜尋
 
Top 10
評價排行
Microsoft Visual Studio 2008
1 joe 270 
2 Raymond 90 
3 marlon 70 
4 丹尼爾 50 
5 好說 50 
6 smfy 50 
7 小誠 20 
8 愛睏魚 20 
9 水瓶天賞 20 
10 ozzy 10 
Microsoft Visual Studio 2008
  專家等級 評價  
  一代宗師 10000  
  曠世奇才 5000  
  頂尖高手 3000  
  卓越專家 1500  
  優秀好手 750  
Microsoft Internet Explorer 6.0. Screen 1024x768 pixel. High Color (16 bit).
2000-2018 程式設計俱樂部 http://www.programmer-club.com.tw/
0.0625