我有一個Windows窗體項目。我不想將表單頭文件中的所有函數和回調以及所有自動生成的代碼都放在一起,而是將它們放在單獨的C++文件中。Visual C++ CLR表單項目。使用單獨的C++文件的功能
我發現這篇文章回答了這個問題,但我無法得到它的工作。我必須失去了一些東西:How to use a separate .cpp file for my event function definitions in windows forms?
在我的單獨C++文件我已經試過如下:
#include "stdafx.h"
#include "DeltaForm.h"
namespace DeltaControl
{
// Search for all serial ports and add them to the port combobox
void searchPorts(void)
{
array<Object^>^ portsArray = SerialPort::GetPortNames();
this->cbPort->Items->AddRange(portsArray);
}
}
這給輸出:
1>test.cpp(10): error C2355: 'this' : can only be referenced inside non-static member functions
1>test.cpp(10): error C2227: left of '->cbPort' must point to class/struct/union/generic type
1>test.cpp(10): error C2227: left of '->Items' must point to class/struct/union/generic type
1>test.cpp(10): error C2227: left of '->AddRange' must point to class/struct/union/generic type
而且這樣的:
#include "stdafx.h"
#include "DeltaForm.h"
namespace DeltaControl
{
// Search for all serial ports and add them to the port combobox
void DeltaForm::searchPorts(void)
{
array<Object^>^ portsArray = SerialPort::GetPortNames();
this->cbPort->Items->AddRange(portsArray);
}
}
輸出:
1>test.cpp(7): error C2039: 'searchPorts' : is not a member of 'DeltaControl::DeltaForm'
1> f:\documents\cloud\projects\deltarobot\deltarobotcontrol_vcpp\deltacontrol\deltacontrol\DeltaForm.h(16) : see declaration of 'DeltaControl::DeltaForm'
1>test.cpp(10): error C2355: 'this' : can only be referenced inside non-static member functions
1>test.cpp(10): error C2227: left of '->cbPort' must point to class/struct/union/generic type
1>test.cpp(10): error C2227: left of '->Items' must point to class/struct/union/generic type
1>test.cpp(10): error C2227: left of '->AddRange' must point to class/struct/union/generic type
這裏是我的表單頭文件:http://pastebin.com/gGfMiwVr 它基本上只是生成的代碼。
我覺得我在這裏錯過了一些非常重要的東西,但我的C++技能還不算太好。
當我把上面第一個例子中的searchPorts函數放到表單頭文件中時,它沒有問題。
編輯:
我剛剛解決了我自己的問題!我不得不在DeltaForm類中聲明該函數:
private: void searchPorts(void);
由於單獨的C++文件沒有定義類中的函數。是否有可能拆分多個C++文件的類,所以我不需要首先聲明該函數?或者,是否可以從課堂外引用表單對象?
感謝:D傻我我應該知道要先申報。有沒有辦法將這個類擴展到多個文件?只需在頭文件中聲明它就足夠簡單了,所以我無法想象在這種情況下我會嘗試在多個文件中擴展一個類。但我不介意知道學習的興趣。 – Chris
@Chris:#Includes在預處理器級別處理,所以理論上你可以通過#including不同部分將類聲明拆分爲多個文件。不過,我從來沒有見過。可能不是一個好主意。 – Duther