LNK2019错误,但Intellisense工作正常
LNK2019 error but Intellisense works fine
我有一个本机C++单元测试项目,该项目在测试中的每个函数调用都会抛出LNK2019错误。令人惊讶的是,IntelliSense工作得很好!
测试中的项目是一个静态库(.lib),由一个公共静态函数组成(类型和成员名称已更改以保护无辜者):
类型.h
#pragma once
#include <string>
using namespace std;
namespace N
{
enum class ResultCode { Undefined, A, B, C};
class MyType
{
public:
static void GetResult(string id, string metadata, ResultCode result);
};
}
类型.cpp
#include "pch.h"
#include "Type.h"
namespace N
{
void MyType::GetResult(string id, string metadata, N::ResultCode result)
{
// implementation
}
}
我的单元测试项目(.dll)不使用测试的头文件。我使用的是谷歌测试框架。以下是来源:
测试.cpp
#include <pch.h>
#include <gtest/gtest.h>
#include <gtesthelpers/gtesthelpers.h>
#include <MyType.h>
class MyTypeUnitTests : public testing::Test {};
TEST(MyTypeUnitTests, Foo)
{
std::string metadata;
N::ResultCode result = N::ResultCode::Undefined;
N::MyType::GetResult("1234", metadata, result);
ASSERT_TRUE(result == N::ResultCode::A);
}
当我编译MyType时,一切都很好。当我编写Test时,IntelliSense为我提供了GetResult的签名。但当我编译时:
Test.obj:错误LNK2019:未解析的外部符号"public:staticvoid __cdecl N:MyType:GetResult(类std::basic_string,类std::allocater>,类std::basic_string,类std::allocater>,enum N::ResultCode)"…在中引用作用
我已经修改了测试项目的属性,以便:
- VC++目录>包含目录包含对包含MyType.h的目录的引用
- VC++目录>引用目录包括对包含MyType.lib的目录的引用
我还确认,在测试项目的项目依赖项下,测试中的项目已被检查。我还使用undname来验证错误中指定的函数名是否与.h和.cpp.中的名称匹配
最后,我在MyType中创建了一个新的静态无参数函数,并尝试从测试中调用它(以排除枚举参数的问题),但没有骰子。我已经按照上面链接到的MSDN页面上的说明进行了操作,我没有任何想法。
我该如何着手解决此问题?
EDIT:显示cpp中的命名空间块。
这是您的问题:
using namespace N;
void MyType::GetResult(string id, string metadata, N::ResultCode result)
{
// implementation
}
实际上,您应该将定义封装到一个名称空间中:
namespace N
{
void MyType::GetResult(string id, string metadata, N::ResultCode result)
{
// implementation
}
}
我通过在配置属性>链接器>输入>附加依赖项的测试项目属性中添加对我的库的引用来解决这个问题。没有路径,只有"Type.lib".
- QSqlquery prepare()和bindvalue()不工作
- 导入库可以跨dll版本工作吗
- 以螺旋方式打印矩阵的程序.(工作不好)
- 对象指针在c++中是如何工作的
- 为什么在Windows上的VS 2019和Clang 9中"size_t"在没有标题的情况下工作
- VSOMEIP-2个设备之间的通信(TCP/UDP)不工作
- 当使用带有VS2019或VSCode的虚幻引擎4.24.2时,我如何修复这些错误的Intellisense错误
- 为字符串中每 N 个字符插入空格的函数没有按照我认为的方式工作?
- C++为线程工作动态地分割例程
- 为什么我的 std::ref 无法按预期工作?
- 布尔比较运算符是如何在C++中工作的
- SampleConsensusPrerejective(ext.RANSAC)是如何真正工作的
- 不确定要在我的main中放入什么才能使我的代码正常工作
- 为什么std::condition_variable notify_all的工作速度比notify_one快(对于随机请
- <<操作员在下面的行中工作
- 有人能解释一下为什么下界是这样工作的吗C++的
- ExtractIconEx:可以工作,但偶尔会崩溃
- Visual Studio 2017,Intellisense无法正常工作
- LNK2019错误,但Intellisense工作正常
- C++:有没有一种方法可以让这个反射宏与IntelliSense一起工作