C++链接器错误LNK 2019未解析的外部符号引用在函数中
在本文之后,我试图实现一个智能类 我有一门课叫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中引用 我在这个代码中做错了什么?你能帮我改正一下吗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*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;
}