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

时间:2017-11-03 14:15:09

标签: c++ arrays mfc cimage

我正在使用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);
};

有人可以解释为什么我不能这样做吗?

1 个答案:

答案 0 :(得分:0)

CObject没有设计具有值语义。因此CObject的拷贝构造函数被标记为私有。因此,声明一个CObject数组 - 或者从像CPngImage这样的CObject派生的数组 - 不是最佳选择。

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

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

相关问题