我有以下标题和源代码 声明一个带有成员变量的类。成员变量是指向该类的智能指针。当我尝试为指针赋值时,程序无法构建错误:未解析的外部符号。 sombody可以向我解释为什么会这样吗?
Header.h
#pragma once
#include <mutex>
using namespace std;
class myClass {
public:
static shared_ptr<myClass> ptr;
};
class myClass2 : public myClass {
};
Class.cpp
#include "stdafx.h"
#include "Header.h"
#include <utility>
int main()
{
myClass instance1;
myClass instance2;
myClass2 instance3;
instance2.ptr = make_shared<myClass>(instance3);
return 0;
}
答案 0 :(得分:1)
在您的代码中,ptr是一个类变量而不是实例变量,因为您在header.h中将其定义为静态。如果要将ptr成员视为实例成员,则应删除静态声明。
答案 1 :(得分:0)
声明static
成员通常要求您为static
成员分配类外的存储空间。更多信息:
http://en.cppreference.com/w/cpp/language/static
添加
shared_ptr<myClass> myClass::ptr;
到你的一个cpp文件来分配存储空间。
但是您正在使用static
成员作为实例成员,这会让您怀疑是否需要static
成员。