我對MFC比較陌生,之前更多是學習C#,希望各位大佬幫助解決下面的問題,尤其是理解上有錯誤務必指出
// CArrayDemo.cpp : 定義控制臺應用程式的入口點。
//
#include "stdafx.h"
#include "CArrayDemo.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// 唯一的應用程式物件
CWinApp theApp;
using namespace std;
class A
{
public:
A(int i, LPCTSTR b)
: i(i)
, b(b)
{
}
const int i;
private:
LPCTSTR b;
};
int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
int nRetCode = 0;
HMODULE hModule = ::GetModuleHandle(NULL);
if (hModule != NULL)
{
// 初始化 MFC 并在失敗時顯示錯誤
if (!AfxWinInit(hModule, NULL, ::GetCommandLine(), 0))
{
// TODO: 更改錯誤代碼以符合您的需要
_tprintf(_T("錯誤: MFC 初始化失敗\n"));
nRetCode = 1;
}
else
{
// TODO: 在此處為應用程式的行為撰寫代碼。
CArray<A, A&> aarray;
}
}
else
{
// TODO: 更改錯誤代碼以符合您的需要
_tprintf(_T("錯誤: GetModuleHandle 失敗\n"));
nRetCode = 1;
}
return nRetCode;
}
錯誤 1 error C2512: “A”: 沒有合適的默認建構式可用 c:\program files\microsoft visual studio 10.0\vc\atlmfc\include\afxtempl.h 401 1 CArrayDemo
錯誤 2 error C2512: “A”: 沒有合適的默認建構式可用 c:\program files\microsoft visual studio 10.0\vc\atlmfc\include\afxtempl.h 416 1 CArrayDemo
錯誤 3 error C2512: “A”: 沒有合適的默認建構式可用 c:\program files\microsoft visual studio 10.0\vc\atlmfc\include\afxtempl.h 464 1 CArrayDemo
根據上面的錯誤我在 afxtempl.h 中的 void CArray<TYPE, ARG_TYPE>::SetSize(INT_PTR nNewSize, INT_PTR nGrowBy) 函式中找到CArray在給陣列擴充長度的時候是必須呼叫默認建構式的,我的 const int i; 到底怎么樣才可以傳遞給陣列里的元素呢?或者說如何實作一個類似readonly的功能?
uj5u.com熱心網友回復:
CArray<A, A&> aarray;改成CArray<A*,A*> aarray;
uj5u.com熱心網友回復:
你這樣定義是可以的,aarray.InsertAt 或者 aarray.Add(。。。)等可以向陣列添加元素
但是,你的class A必須添加一個函式
void ChangeData(int x, LPCSTSR p)//該函式可以修改A的內容
{
i=a;
b=p;
}
然后在你使用的地方
CArray<A,A&> arr;
A a;
arr.ChangeData(x1,p1);//改變資料
arr.Add(a);//將a添加到陣列
.....
arr.ChangeData(xn,pn);
arr.Add(a);
uj5u.com熱心網友回復:
void A::ChangeData(int x, LPCSTSR p)//該函式可以修改A的內容{
i=a;
b=p;
}
uj5u.com熱心網友回復:
CArray 的 SetSize 中有一個 new 的操作, 因此 A 需要有一個沒有引數的建構式 A() : i(0), b(0) {}或者用指標方式 CTypedPtrArray<CPtrArray, A*> parray; 自己new delete
uj5u.com熱心網友回復:
CArray<A, A&> aarray;直接定義成成員變數。然后后面可以用它來Add添加元素
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/102540.html
標籤:基礎類
上一篇:CAsyncSocket::OnReceive接收資料不完整的問題
下一篇:VS2012如何兼容vc
