[解决]:问题不在模板类初始化中,而是在模板类构造函数中使用未定义宏的特定于代码的问题。编译器错误没有抱怨未定义的符号,但是(错误地)与lambdas有关。
我已经找到了答案,但找不到合适的答案。最接近的答案是:C++ invoke explicit template constructor,但我不确定这是否与我的问题完全相关。 我的问题是,如果成员是模板类,如何在初始化列表中初始化结构B的成员?
Header 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
Header 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:&#39;数字&#39;无法隐式捕获,因为未指定默认捕获模式
有没有办法做到这一点,或者某些解决方法呢?
提前致谢:D
答案 0 :(得分:2)
您提供给我们的代码不完整,或者已破坏。这一行:
New(pointer, Type *[u]);
似乎引用了一些缺少的成员方法或全局函数,或者它只是无效。错误信息有点神秘,但那是你的C ++。
我将假设New
是某种宏,因为没有正常的函数(甚至是模板函数)可以将这种类型定义作为参数。你没有给我们New
的定义,所以我们无法分辨。可能是这个宏的缺席(可能是某种内存调试系统的包装?)导致了疯狂的错误。
如果我用此替换New
行:
pointer = new Type*[u];
代码编译得很好。