コードはコンパイルされ、Visual Studio を使用して期待どおりに実行されます。他の場所でコンパイル/実行されることを保証するものではないことは理解していますが、この場合の理由はわかりません。おそらく誰かが明確にするのを助けることができますか?g++ コンパイラは、RGB 型のベクトルのベクトルが宣言されている 45 行目でエラーを返します。
#include <iostream>
#include <string>
#include <vector>
#include <fstream>
using namespace std;
/* The following color method uses the provided formula to determine
the float value of each (i,j) coordinate passed as parameters. */
float color (int i, int j)
{
float col = float (((i & 0x08) == 0) ^ ((j & 0x08) == 0));
return col;
}
int main()
{
// The provided RGB object that stores each rgb value:
struct RGB
{
float r;
float g;
float b;
};
int w;
int h;
string filename;
float c; // to store the result from the color method.
cin >> w >> h >> filename;
// A vector of vectors to represent the 2D array:
vector< vector<RGB> > rgb(h, vector<RGB>(w));
for (int i = 0; i < h; i++)
for (int j = 0; j < w; j++)
{
c = color(i, j);
rgb[i][j].r = c;
rgb[i][j].g = c;
rgb[i][j].b = c;
}
ofstream ppmfile;
ppmfile.open (filename);
ppmfile << "P3\n" << w << " " << h << endl;
ppmfile << "255\n";
for (int i = 0; i < h; i++)
{
// The following loop uses integer multiplication to output to the ppm
// file the rgb values converted to integers on the 0-255 scale.
for (int j = 0; j < w; j++)
{
ppmfile << rgb[i][j].r * 255 << " ";
ppmfile << rgb[i][j].g * 255 << " ";
ppmfile << rgb[i][j].b * 255;
if (j != (w-1))
ppmfile << " ";
}
ppmfile << endl;
}
return 0;
}
g++ でポップアップするエラーの完全なリストは次のとおりです。
hw1.cxx: In function 'int main()':
hw1.cxx:45: error: template argument for 'template<class _Alloc> class std::allocator' uses local type 'main()::RGB'
hw1.cxx:45: error: trying to instantiate 'template<class _Alloc> class std::allocator'
hw1.cxx:45: error: template argument 2 is invalid
hw1.cxx:45: error: template argument 1 is invalid
hw1.cxx:45: error: template argument 2 is invalid
hw1.cxx:45: error: invalid type in declaration before '(' token
hw1.cxx:45: error: template argument for 'template<class _Alloc> class std::allocator' uses local type 'main()::RGB'
hw1.cxx:45: error: trying to instantiate 'template<class _Alloc> class std::allocator'
hw1.cxx:45: error: template argument 2 is invalid
hw1.cxx:45: error: initializer expression list treated as compound expression
hw1.cxx:51: error: invalid types 'int[int]' for array subscript
hw1.cxx:52: error: invalid types 'int[int]' for array subscript
hw1.cxx:53: error: invalid types 'int[int]' for array subscript
hw1.cxx:57: error: no matching function for call to 'std::basic_ofstream<char, std::char_traits<char> >::open(std::string&)'
/usr/local/gcc443/lib/gcc/i386-pc-solaris2.10/4.4.3/../../../../include/c++/4.4.3/fstream:696: note: candidates are: void std::basic_ofstream<_CharT, _Traits>::open(const char*, std::_Ios_Openmode) [with _CharT = char, _Traits = std::char_traits<char>]
hw1.cxx:67: error: invalid types 'int[int]' for array subscript
hw1.cxx:68: error: invalid types 'int[int]' for array subscript
hw1.cxx:69: error: invalid types 'int[int]' for array subscript