Mat*_*een 5 c++ linux compiler-errors compilation
对于我正在研究的项目,我想尝试以下程序:http: //sourceforge.net/projects/tirg/
它由两个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)
Run Code Online (Sandbox Code Playgroud)
我尝试在运行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
Run Code Online (Sandbox Code Playgroud)
编译时得到的错误是:
/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); }
^
Run Code Online (Sandbox Code Playgroud)
这是由这行代码引起的:
std::vector<std::vector<trg::Rgb> > a(300, 255);
Run Code Online (Sandbox Code Playgroud)
我已将汇编的完整输出放在pastebin上:http: //pastebin.com/m285PSrH
我在编译OpenCV时也遇到了问题,因此我的配置可能有问题.我认为这是版本问题,例如标准库的错误版本.
希望有更多C++经验的人可以指出可能出错的地方.谢谢!
小智 5
std::vector<std::vector<trg::Rgb> > a(300, 255);
Run Code Online (Sandbox Code Playgroud)
没有意义.你想写这样的东西:
//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);
}
Run Code Online (Sandbox Code Playgroud)
你应该纠正你的代码中的每个assign()和每次调用构造函数
vector<vector<XX> >
Run Code Online (Sandbox Code Playgroud)
小智 2
i686-apple-darwin11-llvm-g++-4.2 做错了。如果可以进行隐式转换,您将获得向量的二维向量。然而[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;
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1270 次 |
最近记录: |