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

Posted

技术标签:

【中文标题】指向该类的类指针成员:未解析的外部符号【英文标题】: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;

【问题讨论】:

您能否发布您收到的确切错误消息,即它说的是哪个符号未定义? 【参考方案1】:

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

【讨论】:

【参考方案2】:

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

添加一个

shared_ptr<myClass> myClass::ptr;

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

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

【讨论】:

以上是关于指向该类的类指针成员:未解析的外部符号的主要内容,如果未能解决你的问题,请参考以下文章

传递函数指针时未解析的外部符号[重复]

LNK2019“未解析的外部符号”错误(C++ OpenGL)

如何创建一个存储指向成员函数的指针的类 (C++)

未解析的外部符号 PriorityQueue [关闭]

OpenCV:未解析的外部符号

C++ - 未解析的外部符号