gpt4 book ai didi

c++ - 无法在另一个类中实例化模板化类

转载 作者:太空宇宙 更新时间:2023-11-04 14:32:29 24 4
gpt4 key购买 nike

我有两个类:一个是模板化的,一个不是。我试图在非模板类中创建模板类的实例,但程序无法编译。我正在使用 Visual Studio 2012,但在 bar.h 的这一行中收到错误“IntelliSense: expected a type specifier”:

Foo<int> foo_complex(99);  

可以在类外使用此语法(请参阅下面的 console.cpp)。我可以在类中使用空构造函数。是什么赋予了?如何在 Bar 中正确使用 Foo 的非空构造函数?

在此先感谢您的帮助。我到处寻找解决方案,但一无所获。示例代码如下。为清楚起见,类实现是内联的。

foo.h

#pragma once

template<typename T>
class Foo
{
public:
Foo();
Foo(int i);
};

template<typename T>
Foo<T>::Foo()
{
std::cout << "You created an instance of Foo without a value." << std::endl;
}

template<typename T>
Foo<T>::Foo(int i)
{
std::cout << "You created an instance of Foo with int " << i << std::endl;
}

bar.h

#pragma once

#include "foo.h"

class Bar
{
private:
Foo<int> foo_simple;
Foo<int> foo_complex(99); // Error ~ IntelliSense:expected a type specifier
public:
Bar(int i);
};

Bar::Bar(int i)
{
std::cout << "You created an instance of Bar with int " << i << std::endl;
}

控制台.cpp

#include "stdafx.h"
#include <iostream>
#include <string>
#include "foo.h"
#include "bar.h"

int _tmain(int argc, _TCHAR* argv[])
{
Foo<int> foo(1);
Bar bar(2);
std::string any = "any";

std::cout << std::endl;
std::cout << "Press any key to close this window..." << std::endl;
std::cin >> any;
return 0;
}

最佳答案

在构造函数中初始化成员变量:

class Bar
{
private:
Foo<int> foo_complex;
public:
Bar(int i);
};

Bar::Bar(int i) : foo_complex(99)
{
std::cout << "You created an instance of Bar with int " << i << std::endl;
}

关于c++ - 无法在另一个类中实例化模板化类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16467565/

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