5

私が取り組んでいるプロジェクトでは、次のプログラムを試してみたかった: http://sourceforge.net/projects/tirg/

これは 2 つの C++ ファイルで構成されていますが、Linux を実行している私のラップトップではコンパイルできませんが、Mac OS を実行している友人のラップトップでは問題なくコンパイルできます。私は C++ コードをコンパイルした経験がまったくないので、初歩的なミスかもしれません。

問題なくコードをコンパイルすることができた Mac OS を実行しているラップトップは、次の g++ バージョンを使用しました。

i686-apple-darwin11-llvm-g++-4.2 (GCC) 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2336.11.00)

次のバージョンの Arch LInux (64 ビット) を実行しているラップトップで、gcc、g++、clang、clang++ を使用して C++ ファイルをコンパイルしようとしました。

gcc and g++ (GCC) 4.8.1 20130725 (prerelease)
clang version 3.3 (tags/RELEASE_33/final)
Target: x86_64-unknown-linux-gnu
Thread model: posix

コンパイル時に発生するエラーは次のとおりです。

/usr/include/c++/4.8.1/bits/stl_vector.h:1240:36: error: no matching function for call to ‘std::vector<std::vector<unsigned char> >::_M_fill_assign(int&, int&)’
         { _M_fill_assign(__n, __val); }
                                    ^

これは、次のコード行が原因でした:

std::vector<std::vector<trg::Rgb> > a(300, 255);

コンパイルの完全な出力をペーストビンに置きました: http://pastebin.com/m285PSrH

OpenCV のコンパイル時にも問題が発生したため、構成に問題がある可能性があります。たとえば、標準ライブラリのバージョンが間違っているなど、バージョン管理の問題だと思います。

C++ の経験が豊富な人が、何が問題なのかを指摘してくれることを願っています。ありがとう!

4

2 に答える 2

5
std::vector<std::vector<trg::Rgb> > a(300, 255);

意味がありません。あなたはこのようなものを書きたかった:

//std::vector<std::vector<trg::Rgb> > a(picHeight, picWidth);
std::vector<std::vector<trg::Rgb> > a;
a.resize(picWidth);
{   
        std::vector<std::vector<trg::Rgb> >::iterator end = a.end();
        std::vector<std::vector<trg::Rgb> >::iterator it = a.begin();
        for(; it != end; ++it)
                it->resize(picHeight);
} 

コード内の各 assign() とコンストラクターへの各呼び出しを修正する必要があります

vector<vector<XX> >
于 2013-09-20T10:56:35.437 に答える
2

i686-apple-darwin11-llvm-g++-4.2 は間違っています。暗黙的な変換が可能な場合、ベクトルの 2D ベクトルが得られます。ただし[23.3.6.2]:

明示的なベクトル (size_type n);

あなたはすることができます:

struct Rgb {};
int main() {
    std::vector<Rgb> rgb_vector(255);
    std::vector<std::vector<Rgb> > a(300, rgb_vector);
    return 0;
}
于 2013-09-20T11:05:14.310 に答える