gpt4 book ai didi

c++ - 无法访问类 'CObject' 中声明的私有(private)成员?

转载 作者:行者123 更新时间:2023-11-27 23:19:44 25 4
gpt4 key购买 nike

class EventDataValue {
public:
enum Types {
NONE,
INT,
STRING,
DOUBLE,
ULONG
};

EventDataValue() { this->Type = NONE; }
EventDataValue( const EventDataValue &s ) {
this->Type = s.Type;

if (this->Type == INT)
this->i = s.i;
else if (this->Type == STRING)
this->s = s.s;
else if (this->Type == DOUBLE)
this->d = s.d;
else if (this->Type == ULONG)
this->ul = s.ul;
}

EventDataValue& operator=( const EventDataValue &s ) {
this->Type = s.Type;

if (this->Type == INT)
this->i = s.i;
else if (this->Type == STRING)
this->s = s.s;
else if (this->Type == DOUBLE)
this->d = s.d;
else if (this->Type == ULONG)
this->ul = s.ul;

return *this;
}


EventDataValue(int value) {
this->Type = INT;
this->i = value;
}

EventDataValue(CString &value) {
this->Type = STRING;
this->s = value;
}

EventDataValue(LPCTSTR value) {
this->Type = STRING;
this->s = CString(value);
}

EventDataValue(double value) {
this->Type = DOUBLE;
this->d = value;
}

EventDataValue(unsigned long value) {
this->Type = ULONG;
this->ul = value;
}

~EventDataValue() { }

operator int(void) const {
return this->i;
}

operator CString(void) const {
return this->s;
}

operator double(void) const {
return this->d;
}

operator unsigned long(void) const {
return this->ul;
}


Types Type;
int i;
CString s;
double d;
unsigned long ul;
};

class EventData {
public:
EventData(CString strEventCode, CString &strSessionId, int nFlowId = 0) {
this->Add(CString(_T("tp")), strEventCode);
this->Add(CString(_T("ss")), strSessionId);
this->Add(CString(_T("ts")), (int)std::time(0));

if (nFlowId != 0)
this->Add(CString(_T("fl")), nFlowId);
}

template <typename T>
void Add(CString name, T value) {
EventDataValue event_value(value);

if (cMap.Lookup(name, NULL) == TRUE)
return;

cMap[name] = value;
}

CMap<CString, CString, EventDataValue, EventDataValue> cMap;
};

class Events {
public:
Events() { }
~Events() { }

void Add(EventData ev) {
this->aEvents.Add(ev);
}

CStringW Serialize() {
CStringW strOutput;
INT_PTR i, j;

if (_tcscmp(API_FORMAT, FORMAT_JSON) == 0) {
for (i = 0; i != this->aEvents.GetCount(); i++) {
EventData ev = this->aEvents[i];

strOutput += L"{";

j = 0;

POSITION pos = ev.cMap.GetStartPosition();

while (pos != NULL) {
CString key;
EventDataValue value;

ev.cMap.GetNextAssoc( pos, key, value );

strOutput += StringFormat(_T("\"%s\": "), key.GetString());

if (value.Type == EventDataValue::STRING) {
CString str = value;
strOutput += Enquoute(str);
} else if (value.Type == EventDataValue::INT) {
int n = value;
strOutput += StringFormat(_T("%d"), n);
} else if (value.Type == EventDataValue::DOUBLE) {
double d = value;
strOutput += StringFormat(_T("%d"), static_cast<int>(d));
} else if (value.Type == EventDataValue::ULONG) {
ULONG ul = value;
strOutput += StringFormat(_T("%u"), ul);
}

if (j++ < ev.cMap.GetCount() - 1)
strOutput += _T(",");
}

strOutput += _T("}");
}
} else {
for (i = 0; i != this->aEvents.GetCount(); i++) {
EventData ev = this->aEvents[i];

strOutput += _T("<Event>");

j = 0;

POSITION pos = ev.cMap.GetStartPosition();

while (pos != NULL) {
CString key;
EventDataValue value;

ev.cMap.GetNextAssoc( pos, key, value );

strOutput += StringFormat(_T("<%s>"), key.GetString());

if (value.Type == EventDataValue::STRING) {
CString str = value;
strOutput += str;
} else if (value.Type == EventDataValue::INT) {
int n = value;
strOutput += StringFormat(_T("%d"), n);
} else if (value.Type == EventDataValue::DOUBLE) {
double d = value;
strOutput += StringFormat(_T("%d"), static_cast<int>(d));
} else if (value.Type == EventDataValue::ULONG) {
ULONG ul = value;
strOutput += StringFormat(_T("%u"), ul);
}

strOutput += StringFormat(_T("</%s>"), key.GetString());
}

strOutput += _T("</Event>");
}

}

return strOutput;
}

CArray<EventData> aEvents;
};

谁能告诉我为什么在编译时会出现以下错误?

1>c:\program files (x86)\microsoft visual studio 11.0\vc\atlmfc\include\afxtempl.h(1329): error C2248: 'CObject::CObject' : cannot access private member declared in class 'CObject'
1> c:\program files (x86)\microsoft visual studio 11.0\vc\atlmfc\include\afx.h(559) : see declaration of 'CObject::CObject'
1> c:\program files (x86)\microsoft visual studio 11.0\vc\atlmfc\include\afx.h(534) : see declaration of 'CObject'
1> This diagnostic occurred in the compiler generated function 'CMap<KEY,ARG_KEY,VALUE,ARG_VALUE>::CMap(const CMap<KEY,ARG_KEY,VALUE,ARG_VALUE> &)'
1> with
1> [
1> KEY=CString,
1> ARG_KEY=CString,
1> VALUE=EventDataValue,
1> ARG_VALUE=EventDataValue
1> ]

最佳答案

void Add(EventData ev) {
this->aEvents.Add(ev);
}

必须Add(EventData& ev)。您的 EventData 类没有非默认复制构造函数或复制赋值运算符,并且有一个不可复制的成员 (CMap)。这使得 EventData 不可复制。所以你不能按值传递它,因为那样必须制作一个拷贝,而你不能这样做,因为该类是不可复制的。

关于c++ - 无法访问类 'CObject' 中声明的私有(private)成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14018772/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com