2

次のコードでランタイム クラッシュが発生し、デバッグもできません。レビューして、何が起こっているのか教えてください。

// 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 に見つかりませんでした

この行をコメントアウトすると

std::tr1::shared_ptr t2 = t1->shared_from_this();

プログラムはクラッシュすることなく実行されます。

更新:質問は今のところ閉じることができます。VS 機能パックをインストールして、プログラムがクラッシュせずに実行されることを確認します。

4

4 に答える 4

2

グーグルで検索(プロシージャのエントリポイント?_Xweak)、これを見つけました:http: //blog.nilretain.org/

編集:xp-sp3上のmsvc2008で正常にビルドして実行します。xp-sp3には新しいバージョンのmsvcp90d.dllがあります。たぶん、msvc90の最新のredistバージョンをダウンロードしてインストールし、再構築することができます。

編集:あなたの依存関係は何かが欠けていると言っています。これをチェックしてください:

http://answers.yahoo.com/question/index?qid=20090623140325AAInugo

于 2011-01-20T12:43:43.033 に答える
1

テンプレート引数が必要です:

std::tr1::shared_ptr<Test> t1(new Test);
std::tr1::shared_ptr<Test> t2 = t1->shared_from_this();

エラーが存在しない場合、コンパイラはエラーを報告する必要があります。(Visual C ++ 2010は行います)

于 2011-01-20T07:27:40.847 に答える
0

ご使用のコンパイラは、必要なランタイム関数を含む DLL に対してリンクしていないようです。たとえば、インクルード パスにヘッダーを追加したが、最新バージョンの C++ ランタイムにリンクしていない (プロジェクトの設定を確認してください)、またはVisual C++ 2008 機能パックのインストールが機能しなかった、または機能パックを使用していましたが、Visual Studio 2005 などからコンパイルしようとしました。

基本的に、「ソース コード (ヘッダーを含む) を処理する」ステップは正常に機能していますが、「すべての DLL をリンクする」ステップは失敗しています。shared_ptrリンクしているランタイムにs またはsに必要な関数がないため、失敗していますweak_ptr

于 2011-01-20T09:48:40.333 に答える
0

M$ Visual Studio 2008 を使用して M$ Windows SP3 で開発しているときに、この問題が発生しました。Web で見つけた多くのヒントを試して組み合わせました。無駄に。解決策は簡単で、M$ Visual Studio 2008 の SP1 パックをインストールする必要がありました。

問題は、私の外部 DLL が、私が認識していない C++ TR1 関数を使用していたことです。SP なしの M$ Visual Studio 2008 には、適切なランタイム DLL がありません。

そのため、他のソリューションを試す前に、最初に M$ Visual Studio 2008 の SP1 があることを確認してください。

于 2013-09-25T14:30:41.003 に答える