指向该类的类指针成员:未解析的外部符号

时间:2016-11-21 04:14:37

标签: c++ pointers shared-ptr smart-pointers

我有以下标题和源代码 声明一个带有成员变量的类。成员变量是指向该类的智能指针。当我尝试为指针赋值时,程序无法构建错误:未解析的外部符号。 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;
}

2 个答案:

答案 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成员。