0

私はテンプレート クラス A を持っています。定義は a.hpp にあります。

ああ

template <...>
A
{
void Test();
};
#include a.hpp

させれば

cscope -bq a.h

cscope は Test 宣言を見つけることができますが、定義を見つけることができません。

させれば

cscope -bq a.h a.hpp

その場合、cscope は Test 宣言を見つけることさえできません。何かアドバイス?ありがとうございました。

4

1 に答える 1

0

どのプラットフォームの cscope のどのバージョンですか?

次のコードを使用します。

ああ

#ifndef A_H_INCLUDED
#define A_H_INCLUDED
template <class T> A
{
    void Test(T a);
};
#include "a.hpp"
#endif /* A_H_INCLUDED */

a.hpp

#ifndef A_HPP_INCLUDED
#define A_HPP_INCLUDED
template <class T> A::Test(T a) { return !!a; }
#endif /* A_HPP_INCLUDED */

MacOS Xでコンパイルされたcscope 15.7a(おそらく以前のバージョンでコンパイルされた10.6.4で実行)を使用して、次のことを行いました。

cscope -b -q a.*
cscope -d

次に、Testを検索して、次を参照してください。

C symbol: Test

  File  Function Line
0 a.h   <global> 5 void Test(T a);
1 a.hpp Test     3 template <class T> A::Test(T a) { return !!a; }

を検索A::Testすると、次のエラーが返されます。

This is not a C symbol: A::Test

したがって、表面的には、cscope 15.7a にアップグレードする必要があります (またはダウングレードしますか?)。

于 2010-08-18T05:22:19.207 に答える