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

C++链接器错误LNK 2019未解析的外部符号引用在函数中,c++,linker-errors,C++,Linker Errors,在本文之后,我试图实现一个智能类 我有一门课叫Person Person.cpp }) ReferenceCount.cpp SmartClass.h SmartClass.cpp main.cpp 我在使用Visual Studio 2017构建程序时遇到以下链接器错误 LNK2019未解析的外部符号公共:\ uu thiscall SmartClass::SmartClassclass Person*?0$SmartClass@VPerson@@@@QAE@PAVPerson@@@函数_ma

在本文之后,我试图实现一个智能类

我有一门课叫Person

Person.cpp

})

ReferenceCount.cpp

SmartClass.h

SmartClass.cpp

main.cpp

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

LNK2019未解析的外部符号公共:\ uu thiscall SmartClass::SmartClassclass Person*?0$SmartClass@VPerson@@@@QAE@PAVPerson@@@函数_main中引用的Z

LNK2019未解析的外部符号公共:\ uu thiscall SmartClass::~SmartClassvoid??1$SmartClass@VPerson@@@@QAE@XZ在函数_main中引用

我在这个代码中做错了什么?你能帮我改正一下吗


谢谢。

有两个构造函数,一个没有参数,另一个有两个参数。如果你想调用第二个构造函数,你必须给出两个参数作为Person*pt=new PersonScott,25。

Person*pt=new PersonScott,25;应为Person*pt=新PersonScott,25;您需要遵循规则3或使用std::string代替char*name;打字错误:您在构造函数调用中错过了一个右引号。大家好,我更正了有关双引号的代码,但仍然出现相同的错误。@userfirst785935您的init构造函数错误。请参阅此可能的重复:不能使用字符串文字来初始化指针类型为non-const char的变量。字符串文本生成常量字符数组。因此,您应该1使用std::string而不是名称字段2的原始指针接受char const*pName作为构造函数参数。
class Person
{
    private:
        char* name;
        int age;
    public:
        Person();
        Person(const char* pName, int pAge);
        ~Person();
        void Display();
};
#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;
}
#pragma once
class ReferenceCount
{
    private:
         int count;
    public:
        ReferenceCount();
        ~ReferenceCount();
        void AddRef();
        void DelRef();
#include "ReferenceCount.h"

ReferenceCount::ReferenceCount() : count(0)
{}

ReferenceCount::~ReferenceCount()
{}

void ReferenceCount::AddRef()
{
     count++;
}

void ReferenceCount::DelRef()
{
    count--;
}
#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
};
#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;
}
#include "Person.h"
#include "SmartClass.h"

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