2017-10-06 17 views
-3

私はクラスを定義したヘッダーファイルを持ち、クラスメンバーにアクセスするためにunique_ptrも使用しました。それはどのようにunique_ptrを使用してC++のクラスメンバーとクラス変数にアクセスする方法

A obj; 
bool res = obj.concate("hello"); 

をunique_ptrを使用して、我々が行うことができます。
しかし、私は、私たちがやっていることは例えば、クラス のオブジェクトを作成され、一般的にclone.cpp からアクセスする方法がわかりませんか?

私は、私は次のエラーを取得しています

bool result = access->concate("hello"); 

をやろうとしています:

Undefined symbols for architecture x86_64: 
"obja()", referenced from: 
    _main in classA.o 
ld: symbol(s) not found for architecture x86_64 
clone.h 
-------- 

std::unique_ptr<class A> obja(); 

class A 
{ 
public: 
    bool concate(string str){ 
    string a = "hello"; 
    return a == str; 
    } 
private: 
    string b = "world"; 
}; 


clone.cpp 
________ 

int main(){ 
auto access = obja(); 
return 0; 
} 
+1

' - >'演算子を使って、生ポインタを逆参照するのと同じ方法です。 – user0042

+0

Oh boy:https://stackoverflow.com/questions/12573816/what-is-an-undefined-reference-unresolved-external-symbol-error-and-how-do-i-fix – user0042

+0

エラーはかなり明確です。あなたは 'obja'という名前の関数を宣言しています。あなたはそれを呼び出していますが、実際に実装していません。 –

答えて

0

あなたがカッコほぼ同じ、std::unique_ptr<class A> obja();クラスは必要ありません。

あなたがここに達成しようとrのかわからない:auto access = obja(); 私はあなたがそこにconcateを呼び出そうとしましたと仮定し、その後、すべてがこのようなことができます:

class A 
{ 
public: 
    bool concate(string str) { 
     string a = "hello"; 
     return a == str; 
    } 
private: 
    string b = "world"; 
}; 

std::unique_ptr<A> obja; 

int main() { 
    auto access = obja->concate("test"); 
    return 0; 
} 
0
class A 
{ 
     public: 
     bool concate(string str) { string a = "hello"; return a == str; } 

     private: string b = "world"; 
}; 

std::unique_ptr<A> obja = std::make_unique <A>; 

int main() { 
    auto access = obja->concate("test"); return 0; 
} 

あなただけのメモリを割り当てる忘れます。 :)

関連する問題