2016-08-16 27 views
0

私はmy_classというテンプレートクラスを宣言しました。このクラスを別のファイル "main.cpp"で使用します。エラー:不明な型名 "my_class"

私のmain.cppに "my_class.h"が含まれていて、不明な型名エラーが発生しました。誰もが何が起こっているのか知っていますか?ここで

はいくつかのコードです:

// "my_class.h" 
#ifndef TYPE_H_DEFINE 
#define TYPE_H_DEFINE 

#include <vector> 
#include <algorithm> 

namespace wtvr { 

template<class T> 
class my_class { 
public: 
    void add(const T&); 
    const T& get(); 
private: 
    std::vector<T> my_class_vec; 
}; 

template<class T> 
void my_class<T>::add(const T& obj) { 
    my_class_vec.push_back(obj); 
} 

template<class T> 
const T& my_class<T>::get() { 
    std::random_shuffle(my_class_vec.begin(), my_class_vec.end()); 
    return my_class_vec[0]; 
} 
} 

#endif 
+3

あなたが表示したコードは、私にはよく見えます。問題は、あなたが示していないコードのどこかにある必要があります。 –

+2

コードを投稿する必要があります。私たちがあなたが間違っていることをどのように理解すると思いますか? – Barmar

+0

いいえ –

答えて

1

それはトリッキーなものでした!

は私が

#ifndef TYPE_H_DEFINE 
#define TYPE_H_DEFINE 

すでにので、私は別の名前に変更標準C++ライブラリで使用されていましたが、何の不思議がビャーネ・ストロヴストルップは、マクロを嫌っていない理由をガード名が含まれていることが判明します!みんなありがとう!

+0

'#pragma once'を使うことで回避できますが、これは標準ではないコンパイラがサポートしています。 –

+0

@Torbjörnそして、そうでないときは本当に吸う。コンパイラは、サポートしていない '#pragma 'を静かに破棄することができます。 – user4581301

+0

@Torbjörn私は#pragmaを一度使うことができますが、実際にはインクルードガードを使いたいと思います。 –

関連する問題