を働いていないテンプレート次のプロジェクトがコンパイルされると、私は次のコンパイラエラーを取得:(Visual Studioの2010)C++:他のクラスから
1> usingclass.obj:エラーLNK2019:未解決の外部シンボル「パブリック:静的関数 "public:void __thiscall usingclass :: a(void)"で参照されるint __cdecl c1 :: arrSize(int * const) "(?? $ arrSize @ H @ c1 @@ SAHQAH @ Z) QAEXXZ)
コード:
ヘッダ:
c1.h
#pragma once
#include <array>
class c1
{
c1(void);
~c1(void);
public:
template<class T>
static int arrSize(T arr[]);
};
usingclass.h
#pragma once
#include "c1.h"
class usingclass
{
public:
usingclass(void);
~usingclass(void);
void a();
};
ソースファイル:
c1.cpp
#include "c1.h"
c1::c1(void)
{
}
c1::~c1(void)
{
}
template <class T>
int c1::arrSize(T arr[])
{
return (sizeof(arr)/sizeof(arr[0]));
}
usingclass.cpp
#include "usingclass.h"
usingclass::usingclass(void)
{
}
usingclass::~usingclass(void)
{
}
void usingclass::a()
{
int a[2] = {1,2};
int b = c1::arrSize<int>(a);
}
どうすれば修正できますか?
質問には誤解があります。クラスと翻訳単位(コンパイルされたファイル)は直交する概念です。あなたの質問は、別のクラスではなく、別のファイルで定義されたテンプレートを使用することです。 –