0

使用 Visual Studio 2012,以下编译:

void Stuff()
{
  CMap <int, int, int, int > myMap;
}

但是当我尝试返回这样的 CMap 时,如下所示:

CMap<int, int, int, int> GetEncodingMap()
{
  CMap <int, int, int, int> encodingMap;
  return encodingMap;
}

我收到以下编译错误:

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=int,
1>              ARG_KEY=int,
1>              VALUE=int,
1>              ARG_VALUE=int
1>          ]

无论我在 CMap 中使用什么类型,这似乎总是如此。

有人可以帮我理解他发生了什么吗?是否有可能从函数返回 CMap?

4

3 回答 3

2

CMap是一个不可复制的对象,因为它继承自CObject它有一个私有的复制构造函数。如果你想让它可复制,你需要从 CMap 继承并提供你自己的,尽管我不确定这有多可行。

于 2013-08-06T14:08:23.573 回答
0

GetEncodingMap() 方法不创建对象,只是声明和返回。在返回之前尝试创建。

于 2013-08-06T14:14:59.613 回答
0

这只是 MFC 试图阻止您复制 CMap 对象的一种复杂方式。您不能复制 CMap 对象。

于 2013-08-06T14:07:51.483 回答