2 つのクラスがあります。1 つはテンプレート化され、もう 1 つはテンプレート化されていません。テンプレート化されていないクラス内にテンプレート化されたクラスのインスタンスを作成しようとしていますが、プログラムがコンパイルされません。Visual Studio 2012 を使用していますが、bar.h の次の行に「IntelliSense: 型指定子が必要です」というエラーが表示されます。
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;
}