使用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());
}
};
}
Run Code Online (Sandbox Code Playgroud)
编译器错误:
2> ------ Rebuild All started:Project:MyParameterTests,Configuration:Debug 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 :: …
我在PC-Lint(au-misra-cpp.lnt)中收到此错误:
错误1960 :(注意 - 违反MISRA C++ 2008必需规则5-2-12,传递给期望指针的函数的数组类型)
在这段代码上:
_IDs["key"] = "value";
Run Code Online (Sandbox Code Playgroud)
_ID声明为:
std::map<std::string,std::string> _IDs;
Run Code Online (Sandbox Code Playgroud)
也尝试改为:
_IDs.insert("key","value");
Run Code Online (Sandbox Code Playgroud)
但得到同样的错误.
如何让代码符合misra?
我在PC-Lint中遇到这些错误(au-misra-cpp.lnt):
ConverterUtil.cpp(90):错误864 :(信息 - 涉及变量'transformValue'的表达式可能取决于评估顺序[ MISRA C++规则5-2-10 ])
ConverterUtil.cpp(90):错误864 :(信息 - 涉及变量'transformValue'的表达式可能取决于评估顺序[ MISRA C++规则5-2-10 ])
ConverterUtil.cpp(90):错误534 :(警告 - 忽略函数'std :: transform(std :: _ String_iterator >>,std :: _ String_iterator >>,std :: _ String_iterator >>,int(*))的返回值(int))'(与第998行,文件C:\ Program Files(x86)\ Microsoft Visual Studio 11.0\VC\include\algorithm)比较[MISRA C++规则0-1-7和8-4-6],[ MISRA C++规则0-3-2])
在这段代码上:
/**Conversion from std::string to bool*/
bool ConverterUtil::ConvertStdStringToBool(const std::string value)
{
std::string transformValue = value;
bool retValue = false;
std::transform(transformValue.begin(), transformValue.end(), transformValue.begin(), &::tolower);
if(transformValue == std::string(static_cast<const char *>("true")))
{
retValue = true;
}
return retValue;
}
Run Code Online (Sandbox Code Playgroud)
我猜测它不喜欢我在转换中使用相同的std :: …