[解決済み]: 問題はテンプレート クラスの初期化ではなく、テンプレート クラス コンストラクター内で未定義のマクロを使用するというコード固有の問題でした。コンパイラ エラーは、未定義のシンボルについては文句を言いませんでしたが、(誤って) ラムダに関連していました。
答えを探しましたが、正確な答えが見つかりませんでした。最も近い答えはここにあります:C++は明示的なテンプレートコンストラクターを呼び出しますが、それが私の質問に完全に関連しているかどうかはわかりません. 私の質問は、メンバーがテンプレート クラスの場合、初期化リストで構造体 B のメンバーを初期化するにはどうすればよいですか?
ヘッダー ClassA.h:
#ifndef _A_
#define _A_
#include <typeinfo>
#include <windows.h>
template<class Type> class A{
int u,v;
Type** pointer;
public:
A();
A(int number);
~A();
Type& operator[] (int i){
typeid(Type);
return *pointer[i];
}
Type& Get(int i)
{
typeid(Type);
return *pointer[i];
}
Type *GetPointer(int i)
{
typeid(Type);
return pointer[i];
}
Type* add ();
Type& add(Type *element);
Type& add(Type *element, int place);
void expand(int NewLength);
void swap(Type *element, int place);
void remove(int number);
void remove(Type *element);
void removePointer(int number);
void removePointer(Type *element);
};
template<class Type>A<Type>::A(){
u = 128;
v = 10;
}
template<class Type>A<Type>::A(int number){
//some thing to do with number;
u = number;
v = 10;
New( pointer, Type *[u] );
}
template <class Type> A<Type>::~A()
{
}
template <class Type> void A<Type>::expand(int NewLength)
{
Type **NewList = NULL;
NewList = new Type*[NewLength];
}
template <class Type> Type* A<Type>::add ()
{
pointer[u] = new Type;
}
template <class Type> Type& A<Type>::add(Type *element)
{
}
template <class Type> Type& A<Type>::add(Type *element, int place)
{
}
template <class Type> void A<Type>::swap(Type *element, int place)
{
}
template <class Type> void A<Type>::remove(Type *element)
{
}
template <class Type> void A<Type>::removePointer(int nume)
{
}
template <class Type> void A<Type>::removePointer(Type *element)
{
}
#endif
ヘッダー StructB.h:
#pragma once
#ifndef _B_
#define _B_
#include "ClassA.h"
struct C{
float x,y,z;
};
struct B{
private:
B(){
}
public:
int x,y;
A<B*> member1;
A<C> member2;
B(int X,int Y) : member1(5),member2(5) {
//initialize x,y
}
void Add(B* otherB){
B** _pOtherB = new B*; (*_pOtherB) = otherB;
member1.add(_pOtherB);
}
};
#endif
コンパイラーはこのエラーに文句を言います (およびその他のエラーがいくつかあります。問題があれば投稿できます)。
エラー C3493: 既定のキャプチャ モードが指定されていないため、'number' を暗黙的にキャプチャすることはできません
これを行う方法、またはおそらくいくつかの回避策はありますか?
前もって感謝します:D