2016-11-21 39 views
-1

我有以下頭文件和源代碼, 聲明帶有成員變量的類。成員變量是指向該類的智能指針。當我嘗試爲指針賦值時,程序無法生成錯誤:無法解析的外部符號。可以向我解釋爲什麼會出現這種情況?指向該類的類指針成員:無法解析的外部符號

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

你可以發佈你正在得到的確切的錯誤消息,即它說的是哪個符號undefined? –

回答

1

在你的代碼中,ptr是一個類變量而不是實例變量,因爲你在header.h中將它定義爲靜態的。如果你想把ptr成員當作實例成員,你應該刪除靜態聲明。

0

聲明static成員通常需要您爲類別static成員分配存儲空間。這裏更多的信息: http://en.cppreference.com/w/cpp/language/static

添加

shared_ptr<myClass> myClass::ptr; 

你的cpp文件分配存儲空間的一個。

但是,您正在使用static成員作爲實例成員,因此您是否需要static成員根本沒有問題。