我在下面的代码中遇到运行时崩溃而且无法调试。请查看并告诉我发生了什么。
// CppConsole.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <iostream>
#include <assert.h>
class Test : public std::tr1::enable_shared_from_this<Test>
{
public:
Test():x(0),y(0),z(0){};
int x;
float y;
double z;
};
int _tmain(int argc, _TCHAR* argv[])
{
std::tr1::shared_ptr<Test> t1(new Test);
std::tr1::shared_ptr<Test> t2 = t1->shared_from_this();
return 0;
}
我已经包含了所有标题,程序编译正常。这是我得到的错误:
CppConsole.exe - 找不到入口点过程入口点 ?_Xweak @ tr1 @std @@ YAXXZ无法位于动态链接中 库MSVCP90D.dll
如果我注释掉这一行
int _tmain(int argc, _TCHAR* argv[])
{
std::tr1::shared_ptr<Test> t1(new Test);
std::tr1::shared_ptr<Test> t2 = t1->shared_from_this();
return 0;
}
程序运行时没有崩溃。
更新:问题暂时无法解决。我将尝试安装VS功能包并查看程序执行的天气,而不会发生任何崩溃。
答案 0 :(得分:2)
用Google搜索(程序入口点?_Xweak),发现:http://blog.nilretain.org/
编辑:我在我的msvc 2008上在xp-sp3上成功构建并运行它,xp-sp3具有更高版本的msvcp90d.dll。 也许你可以下载并安装msvc90的最新redist版本并重建。
编辑:您的依赖关系表示缺少某些内容。看看这个:
http://answers.yahoo.com/question/index?qid=20090623140325AAInugo
答案 1 :(得分:1)
您需要一个模板参数:
std::tr1::shared_ptr<Test> t1(new Test);
std::tr1::shared_ptr<Test> t2 = t1->shared_from_this();
如果错误不存在,编译器应报告错误。 (Visual C ++ 2010确实)
答案 2 :(得分:0)
您的编译器似乎没有使用所需的运行时函数链接DLL。例如,如果您将标头添加到包含路径,但未链接到最新版本的C ++运行时(检查项目的设置),或安装the Visual C++ 2008 feature pack不起作用,或者您安装了该功能打包然后尝试从Visual Studio 2005等编译。
基本上“处理源代码(包括头文件)”步骤工作正常,但“链接所有DLL”步骤失败。它失败了,因为您链接的运行时没有shared_ptr
或weak_ptr
所需的函数。
答案 3 :(得分:0)
使用M $ Visual Studio 2008在M $ Windows SP3下进行开发时遇到了这个问题。我尝试并结合了许多我可以在网上找到的提示。无济于事。解决方案很简单,我必须为M $ Visual Studio 2008安装SP1包!
问题是我的外部DLL使用了我不知道的C ++ TR1函数。没有SP的M $ Visual Studio 2008没有正确的运行时DLL。
因此,在尝试任何其他解决方案之前,请确保首先为M $ Visual Studio 2008安装了该SP1。