gpt4 book ai didi

C++初始化模板类构造函数

转载 作者:行者123 更新时间:2023-11-30 04:48:56 24 4
gpt4 key购买 nike

如何在类 A 中初始化类 B foo 的指针?我是 C++ 新手。

标题.h

namespace Core
{
enum type
{
Left, Right
};

template<type t>
class B
{
public:
B(int i);
private:
type dir;
int b = 12;
};

class A
{
public:
B<Left> *foo;
};
}

源.cpp

namespace Core
{
template<type t>
B<t>::B(int i)
{
dir = t;
b = i;
}
}

int main()
{
Core::A *a = new Core::A;
a->foo = new Core::B<Core::Left>(10);

return 0;
}

最佳答案

Source.cpp 需要一个 #include "Header.h" 语句,而 Header.h 需要一个 header guard。

此外,您需要将B 的构造函数的实现移动到头文件中。参见 Why can templates only be implemented in the header file? .

试试这个:

标题.h:

#ifndef HeaderH
#define HeaderH

namespace Core
{
enum type
{
Left, Right
};

template<type t>
class B
{
public:
B(int i);
private:
type dir;
int b = 12;
};

class A
{
public:
B<Left> *foo;
};

template<type t>
B<t>::B(int i)
{
dir = t;
b = i;
}
}

#endif

源.cpp

#include "Header.h"

int main()
{
Core::A *a = new Core::A;
a->foo = new Core::B<Core::Left>(10);
//...
delete a->foo;
delete a;
return 0;
}

我建议通过内联 B 的构造函数并给 A 一个构造函数来初始化 foo 来更进一步:

标题.h:

#ifndef HeaderH
#define HeaderH

namespace Core
{
enum type
{
Left, Right
};

template<type t>
class B
{
public:
B(int i)
{
dir = t;
b = i;
}

private:
type dir;
int b = 12;
};

class A
{
public:
B<Left> *foo;

A(int i = 0)
: foo(new B<Left>(i))
{
}

~A()
{
delete foo;
}
};
}

#endif

源.cpp

#include "Header.h"

int main()
{
Core::A *a = new Core::A(10);
//...
delete a;
return 0;
}

关于C++初始化模板类构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55624001/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com