5

Visual Studio 2012 ネイティブ ユニット テストを使用すると、共有ポインターを使用するとコードをコンパイルできません。

私のコード:

#include "stdafx.h"
#include "CppUnitTest.h"
#include "ParameterTest.h"

using namespace Microsoft::VisualStudio::CppUnitTestFramework;
using namespace MyParameter;

namespace MyParameterTests
{       
    TEST_CLASS(MyParameterTests)
    {
    public:

        TEST_METHOD(CheckParametersWithPathReturnsNotNull)
        {
            //Arrange
            Parameter parameter = Parameter();

            //Act
            std::shared_ptr<std::string> actual = parameter.CheckParameters("C:\\Parameter.db");

            //Assert
            Assert::IsNotNull(actual, L"Should not return null", LINE_INFO());

        }

    };
}

コンパイラ エラー:

2>----- 再構築 すべて開始: プロジェクト: MyParameterTests、構成: Win32 のデバッグ ------ 2> stdafx.cpp 2> ParameterTestTests.cpp 2>c:\users\\documents\visual studio 2012\ projects\myparametertests\parametertests.cpp(26): エラー C2784: 'void Microsoft::VisualStudio::CppUnitTestFramework::Assert::IsNotNull(const T *,const wchar_t *,const Microsoft::VisualStudio::CppUnitTestFramework::__LineInfo * )' : 'const T *' のテンプレート引数を 'std::shared_ptr<_Ty>' から推測できませんでした 2> [ 2> _Ty=std::string 2> ] 2> c:\program files (x86 )\microsoft visual studio 11.0\vc\unittest\include\cppunittestassert.h(259) : 'Microsoft::VisualStudio::CppUnitTestFramework::Assert::IsNotNull' の宣言を参照してください

4

1 に答える 1

9

交換する必要があります

Assert::IsNotNull(actual, L"Should not return null", LINE_INFO()); 

Assert::IsNotNull(actual.get(), L"Should not return null", LINE_INFO());

確かに、アサーションはポインターが null かどうかをチェックする必要がありますが、スマート ポインターは厳密にはポインターではありません(ポインターを管理するオブジェクトです)。

于 2013-06-05T12:17:57.713 に答える