Умный указатель: сбой во время выполнения в VS 9 под управлением WinXP-Sp3 - PullRequest
2 голосов
/ 20 января 2011

Я получаю сбой во время выполнения в следующем фрагменте кода и не могу отладить также. Пожалуйста, просмотрите и дайте мне знать, что происходит.

// CppConsole.cpp : Defines the entry point for the console application.
//<br/>#include "stdafx.h"<br/>#include <iostream><br/>#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;
    };</p>

<pre><code>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 ]

2 голосов
/ 20 января 2011

Погуглил (Точка входа в процедуру? _Xweak), нашел это: http://blog.nilretain.org/

РЕДАКТИРОВАТЬ: Я успешно собираю и запускаю его на моем msvc 2008 на xp-sp3, который имеет более позднюю версию msvcp90d.dll. Возможно, вы сможете скачать и установить последнюю версию redist-версии msvc90 и перестроить.

РЕДАКТИРОВАТЬ: ваши зависимости говорят, что чего-то не хватает. проверить это:

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

1 голос
/ 20 января 2011

Вам нужен аргумент шаблона:

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

Компилятор должен сообщить об ошибке, если ее нет. (Visual C ++ 2010 делает)

0 голосов
/ 25 сентября 2013

У меня была эта проблема при разработке под M $ Windows SP3 с M $ Visual Studio 2008. Я попробовал и объединил много подсказок, которые я мог найти в Интернете. Но безрезультатно. Решение было простым, мне пришлось установить пакет SP1 для M $ Visual Studio 2008!

Дело в том, что мои внешние DLL использовали функции C ++ TR1, о которых я не знал. M $ Visual Studio 2008 без SP не имеет правильных библиотек времени выполнения.

Итак, сначала убедитесь, что у вас есть этот пакет SP1 для вашей M $ Visual Studio 2008, прежде чем пытаться использовать любое другое решение.

0 голосов
/ 20 января 2011

Похоже, что ваш компилятор не связывает библиотеку DLL с необходимыми функциями времени выполнения. Например, если вы добавили заголовки в свой путь включения, но не указали ссылку на последнюю версию среды выполнения C ++ (проверьте настройки своего проекта) или не установили пакет функций Visual C ++ 2008 , то не или вы установили пакет компонентов, но затем попытались скомпилировать его из Visual Studio 2005 и т. д.

В основном шаг «обработать исходный код (включая заголовки)» работает нормально, но шаг «связать все библиотеки DLL» не выполняется. И это терпит неудачу, потому что среда выполнения, с которой вы ссылаетесь, не имеет необходимых функций для shared_ptr с или weak_ptr с.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...