无法创建CPngImage类的数组或向量

Cannot create array or vector of CPngImage class

本文关键字:数组 向量 创建 CPngImage      更新时间:2023-10-16

我使用的是MFC Visual Studio 8版本9。我想创建一个CPngImage对象的数组或向量。如果我声明数组为全局数组,那就可以了。如果我试图在中将数组添加到我自己的类中,则会出现以下错误:

afxwin.h(312):错误C2248:"CObject::CObject":无法访问在类"CObject"中声明的私有成员

下面是我尝试做的一个例子:

#pragma once
#include <list>
#include <vector>
#include <iterator>
#include <afxtoolbarimages.h>
#include <afxwin.h>
using namespace std;
#define MAX_IMAGES 30
class PayAppReport
{
private:
CString m_projectName;
CString m_address;
CString m_city;
CString m_county;
CString m_GCcontact;
CString m_weather;
vector<CString> m_contractorsOnSite;
vector<CString> m_workInPlace;
vector<CString> m_workProjected;
vector<CString> m_issues;
vector<CString> m_report;
CPngImage pngImage[MAX_IMAGES];
float m_amount;
int m_payapp,zipCode,currentLine;
COleDateTime m_start,m_stop,m_observation;
bool m_OnSchedule;
CRect printRect;
public:
vector<CString> m_pictures;
PayAppReport(void);
~PayAppReport(void);
void Clear();
void SetProjectName(CString name);
CString GetProjectName();
void SetAddress(CString name);
CString GetAddress();
void SetCity(CString name);
CString GetCity();
void SetCounty(CString name);
void SetCounty(int zipCode);
CString GetCounty();
void SetGCcontact(CString name);
CString GetGCcontact();
void SetAmount(float dollars);
float GetAmountFloat();
CString GetAmountString();
void SetPayAppNumber(int num);
int GetPayAppNumber();
void SetZipCode(int code);
int GetZipCode();
void SetOnSchedule(bool ans);
bool OnSchedule();
void SetStartDate(COleDateTime date);
void SetCompletionDate(COleDateTime date);
void SetObservationDate(COleDateTime date);
COleDateTime GetStartDate();
COleDateTime GetCompletionDate();
COleDateTime GetObservationDate();
void AddContractorsOnSite(CString name);
void AddWorkInPlace(CString name);
void AddWorkProjected(CString name);
void AddIssues(CString name);
void AddPictures(CString name);
int GetNumberOfContractorsOnSite();
int GetNumberOfWorkInPlace();
int GetNumberOfWorkProjected();
int GetNumberOfIssues();
int GetNumberOfPictures();
CString GetContractorsOnSite(int num);
CString GetContractorsOnSite();
CString GetWorkInPlace(int num);
CString GetWorkProjected(int num);
CString GetIssues(int num);
CString GetWorkInPlace();
CString GetWorkProjected();
CString GetIssues();
CString GetPictures(int num);
void SetWeather(CString name);
CString GetWeather();
CString PutList(vector<CString> theList);
void InitializeContractorsOnSite();
void InitializeWorkInPlace();
void InitializeWorkProjected();
void InitializeIssues();
void InitializePictures();
void PutLine(CString rightText, CString leftText, CDC *pDC, HDC hDC, bool indent, int height);
CString toCurrency(float val);
};

有人能解释一下我为什么不能这样做吗?

CObject不是用值语义设计的。因此,CObject的复制构造函数被标记为private。因此,声明一个CObject数组——或者一个从像CPngImage这样的CObject派生的数组——并不是一种方法。

更改数组以容纳指针,而不是整个对象(即CPngImage*而不是CPngImage)。看看这是否有帮助。

(在问这个问题之前,你有没有看过班级的声明?)