【问题标题】:Class pointer member pointing to that class: unresolved external symbol指向该类的类指针成员:未解析的外部符号
【发布时间】:2016-11-21 04:14:36
【问题描述】:

我有以下标头和源代码 声明一个带有成员变量的类。成员变量是指向该类的智能指针。当我尝试为指针赋值时,程序无法构建并出现错误:未解析的外部符号。有人可以向我解释为什么会这样吗?

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;
}

【问题讨论】:

  • 您能否发布您收到的确切错误消息,即它说的是哪个符号未定义?

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


【解决方案1】:

在您的代码中,ptr 是一个类变量而不是一个实例变量,因为您在 header.h 中将它定义为静态的。如果要将 ptr 成员视为实例成员,则应删除静态声明。

【讨论】:

    【解决方案2】:

    声明static 成员通常需要您在类外部为static 成员分配存储空间。更多信息在这里: http://en.cppreference.com/w/cpp/language/static

    添加一个

    shared_ptr<myClass> myClass::ptr;
    

    到您的一个 cpp 文件来分配存储空间。

    但是您将static 成员用作实例成员,这让人怀疑您是否根本不需要static 成员。

    【讨论】:

      猜你喜欢
      • 2018-03-24
      • 1970-01-01
      • 2017-10-06
      • 1970-01-01
      • 1970-01-01
      • 2014-11-14
      • 2012-08-20
      • 1970-01-01
      相关资源
      最近更新 更多