关于Visual Studio 2010 Warning C4251

zhongchengli 2011-01-20 02:01:41

#include <string>
class __declspec(dllexport) A
{
private:
std::string s; //vs2008没有问题、vs2010 warning C4251出现

};

在网上查到了一些C4251的信息但还是不是很明白,最不理解的就是vs2008没有问题vs2010 warning C4251出现,是vs2010错了还是vs2008的bug?

http://www.unknownroad.com/rtfm/VisualStudio/warningC4251.html
http://support.microsoft.com/kb/q168958/

...全文
747 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
chenghaiwain 2011-01-24
  • 打赏
  • 举报
回复

// AImp.h
#include <string>
class AImp
{
private:
std::string s;
};

// A.h
class AImp;
class __declspec(dllexport) A
{
A();
~A();
private:
AImp *imp_;
};

// A.cpp
#include "A.h"
#include "AImp.h"

A::A()
: imp_(new AImp())
{
}

A::~A()
{
delete imp_;
}


qq120848369 2011-01-24
  • 打赏
  • 举报
回复
想办法去掉Warning即可。
Jim_King_2000 2011-01-24
  • 打赏
  • 举报
回复
LZ可以尝试用Pimpl手法包装一下导出类。

// AImp.h
#include <string>
class AImp
{
private:
std::string s;
};

// A.h
class AImp;
class __declspec(dllexport) A
{
private:
AImp *imp_;
};

// A.cpp
#include "A.h"
#include "AImp.h"

A::A()
: imp_(new AImp())
{
}

A::~A()
{
delete imp_;
}
zhongchengli 2011-01-24
  • 打赏
  • 举报
回复
问题1:

vs2010应该是对的(自己的推测)。

问题2:

在std::string s; 前加入下面代码可以消除warning C4251

template class __declspec(dllexport) std::allocator<char>;
template class __declspec(dllexport) std::basic_string<char>;

艾莎云 2011-01-24
  • 打赏
  • 举报
回复
那既然是BUG,你可以直接在帮助栏-->报告BUG啦,估计是兼容问题吧 要不试试05的,10的毕竟是Trial的,not Pro!
zhongchengli 2011-01-24
  • 打赏
  • 举报
回复
说的不清楚吗?整理一下,请大家帮帮忙!
起因:在做vs2008迁移到vs2010的工作的时候,发现原本没有问题的程序,迁移到vs2010后出现了大量的warning C4251。

warning C4251出现的例子代码:
例子代码:
#include <string>
class __declspec(dllexport) CTest
{
private:
std::string s; //vs2008没有问题、vs2010 warning C4251出现

};

步骤1:用vs2008新建Win32 DLL工程。
步骤2:拷贝上面的代码,放到CPP文件。
步骤3:编译
步骤4:用vs2010新建Win32 DLL工程。
步骤5:拷贝上面的代码,放到CPP文件。
步骤6:编译

结果:
步骤3编译正常,步骤6出现warning C4251。

问题:
1.为什么vs2008没有问题vs2010 warning C4251出现,是vs2010错了还是vs2008的错了?(也就是说这个warning到底该不该报)
2.怎么去掉这个warning。(除了#pragma warning( disable: 4251 ))


在网上查到了一些C4251的信息:
http://www.unknownroad.com/rtfm/VisualStudio/warningC4251.html
http://support.microsoft.com/kb/q168958/
http://topic.csdn.net/t/20040410/18/2949513.html
clackchen 2011-01-20
  • 打赏
  • 举报
回复
能不能说详细点 是不是版本升级的缘故啊!!!
zhongchengli 2011-01-20
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 xiaoyuanyuan2009 的回复:]
我头一次见到这种类名。 那是函数吗
[/Quote]
是类名
class __declspec(dllexport) CTest
{
private:
std::string s; //vs2008没有问题、vs2010 warning C4251出现

};
谁学逆向工程 2011-01-20
  • 打赏
  • 举报
回复
我头一次见到这种类名。 那是函数吗
zhongchengli 2011-01-20
  • 打赏
  • 举报
回复
http://topic.csdn.net/t/20040410/18/2949513.html
和这个说的是一个问题。
1.看了上面的说明似懂非懂,哪位高手在给详细解释下。
2.为什么vs2008没有问题vs2010 warning C4251出现,是vs2010错了还是vs2008的bug?

zhongchengli 2011-01-20
  • 打赏
  • 举报
回复
等待高手回复!!!
zhongchengli 2011-01-20
  • 打赏
  • 举报
回复
谢谢回复,但好像不是一个问题!

65,186

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧