C++ 链接器错误 LNK 2019 函数中引用的未解析的外部符号

C++ Linker error LNK 2019 unresolved external symbol referenced in function

本文关键字:符号 外部 引用 链接 错误 LNK 函数 2019 C++      更新时间:2023-10-16

我正在尝试在文章之后实现一个智能类

https://www.codeproject.com/Articles/15351/Implementing-a-simple-smart-pointer-in-c

我有一个名为Person的类。

class Person
{
private:
char* name;
int age;
public:
Person();
Person(const char* pName, int pAge);
~Person();
void Display();
};

人.cpp

#include<iostream>
#include "Person.h"
Person::Person() : name(nullptr), age(0)
{}
Person::Person(const char* pName, int pAge) 
{
name = new char[std::strlen(pName) + 1];
std::strcpy(name, pName);
age = pAge;
}
Person::~Person()
{}
void Person::Display()
{
std::cout << "Name is " << name << " and age is " << age << std::endl;
}

ReferenceCount.h

#pragma once
class ReferenceCount
{
private:
int count;
public:
ReferenceCount();
~ReferenceCount();
void AddRef();
void DelRef();

};

引用计数.cpp

#include "ReferenceCount.h"
ReferenceCount::ReferenceCount() : count(0)
{}
ReferenceCount::~ReferenceCount()
{}
void ReferenceCount::AddRef()
{
count++;
}
void ReferenceCount::DelRef()
{
count--;
}

智能类.h

#pragma once
#include "ReferenceCount.h"
template <typename T> class SmartClass
{
private:
T* pData;
ReferenceCount* rc;
public:
SmartClass();
SmartClass(T* data);
SmartClass(const SmartClass<T>& sp); // copy constructor
~SmartClass();
T& operator*();
T* operator->();
SmartClass<T>& operator=(const SmartClass<T>& sp); // copy assignment operator
};

智能类.cpp

#include "SmartClass.h"
template <typename T>
SmartClass<T>::SmartClass() : rc(0)
{
rc = new ReferenceCount();
rc->AddRef();
}
template <typename T> 
SmartClass<T>::SmartClass(T* data) : pData(data), rc(0)
{
rc = new ReferenceCount();
rc->AddRef();
}
template<typename T>
SmartClass<T>::SmartClass(const SmartClass<T>& sp)  // copy constructor
{
this->pData = sp.pData;
this->rc = sp.rc;
}
template <typename T>
SmartClass<T>::~SmartClass()
{
if (rc->DelRef() == 0) 
{
delete pData;
delete rc;
}
}
template <typename T>
T& SmartClass<T>::operator*()
{
return *pdata;
}
template<typename T>
T* SmartClass<T>::operator->()
{
return pData;
}
template <typename T>
SmartClass<T>& SmartClass<T>::operator=(const SmartClass<T>& sp)
{
if (this != &sp)
{
if (rc->DelRef() == 0)
{
delete pData;
delete rc;
}
pData = sp.pData;
rc = sp.rc;
rc->AddRef();
}
return *this;
}

主.cpp

#include "Person.h"
#include "SmartClass.h"
int main()
{
SmartClass<Person> p(new Person("Scott", 25));
return 0;
}

当我使用 Visual Studio 2017 构建程序时,我遇到了以下链接器错误。

LNK2019未解析的外部符号"public: __thiscall SmartClass::SmartClass(class Person *("(??0?$SmartClass@VPerson@@@@QAE@PAVPerson@@@Z( 在函数_main中引用

LNK2019未解析的外部符号"public: __thiscall SmartClass::~SmartClass(void("(??1?$SmartClass@VPerson@@@@QAE@XZ( 在函数 _main 中引用

我在此代码中做错了什么?你能帮我纠正一下吗?

谢谢。

有两个构造函数,一个没有参数,另一个有两个参数。如果要调用第二个构造函数,则必须给出两个参数,即"Person *pt = new Person("Scott", 25("。

相关文章: