Code::Blocks を使用して C++ で学術的なプロジェクトを行っていますが、奇妙な可視性エラーが発生します。
部分的なメイン ファイルは次のとおりです。
//main.cpp
#include <iostream>
#include <fstream>
#define DEFContainerSize 100
#include <string>
#include <list>
#include <sstream>
#include <cctype>
using namespace std;
#include "iteration1.cpp"
#include "iteration2.cpp"
int main(int argNum, char *args[])
{
//Content skipped here!!
}
同梱の iteration1.cpp には、次のような定義が含まれています。
//部分反復1.cpp
//Content skipped here!!
template <class Coords, class Rad>
struct
Circle {
Coords Coordinates;
Rad Radius;
};
//Content skipped here!!
template <class Coords, class Rad>
istream
&operator>>(istream &input, Circle<Coords,Rad> &circle)
{
StringFunctionAndArguments fa;
input>>fa;
proc_FromStringFunctionAndArguments2<Coords,Rad>
(fa,"Circle","operator>>",circle.Coordinates,circle.Radius);
return input;
};
template <class Coords, class Rad>
ostream
&operator<<(ostream &output, Circle<Coords,Rad> &circle)
{
output<<"Circle("<<circle.Coordinates<<","<<circle.Radius<<")";
return output;
};
//Content skipped here!!
そして、これはうまく機能します。しかし、同様の定義を iteration2.cpp に入れようとすると、次のようになります。
//iteration2.cpp this time full file.
template <class Coords>
struct
Triangle
{
Coords Coordinates1,
Coordinates2,
Coordinates3;
};
template <class Coords>
istream
&operator>>(istream &input, Triangle<Coords> &tr)
{
StringFunctionAndArguments fa;
input>>fa;
proc_FromStringFunctionAndArguments2<Coords,Coords>
(fa,"Triangle","operator>>",tr.Coordinates1,
tr.Coordinates2);
tr.Coordinates3 = fa.Arguments.back();
return input;
};
template <class Coords>
ostream
&operator<<(ostream &output, Triangle<Coords> &tr)
{
output<<"Triangle("<<tr.Coordinates1<<
","<<tr.Coordinates2<<
","<<tr.Coordinates3<<")";
return output;
};
発生してはならない奇妙なエラーが発生します。
stud\1mTRPO\labs\1\Lab2\iteration2.cpp|17|error: 'istream' does not name a type|
stud\1mTRPO\labs\1\Lab2\iteration2.cpp|30|error: 'ostream' does not name a type|
||=== Build finished: 2 errors, 0 warnings (0 minutes, 4 seconds) ===|
通常は iteration1.cpp に追加できますが、iteration2.cpp に追加する必要があります。
Windows XP で Code::Blocks 12.11 を使用しています。
mingw32-g++.exe -std=c++11 -Wall -fexceptions -g
IDEを変更する時が来ましたか?
どうすれば問題を解決できますか? 事前に回答いただきありがとうございます!