无法在 Linux 上编译C++代码,但可以在 Mac OS 上编译
Cannot compile C++ code on Linux, but can on Mac OS
对于我正在从事的项目,我想尝试以下程序: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)
我尝试在运行以下版本的 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);
我已经将编译的完整输出放在 pastebin 上:http://pastebin.com/m285PSrH
我在编译 OpenCV 时也遇到了问题,所以我的配置可能有问题。我认为这是一个版本控制问题,例如标准库的错误版本。
希望在C++方面有更多经验的人可以指出可能出错的地方。谢谢!
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> >
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;
}
相关文章:
- Clion显示错误,但可以使用Cmake成功构建代码
- Eclipse CDT clang 工具链 - 无法从链接器选项中删除 stdlibc++,但可以添加 libc++,E
- 代码编译但不起作用!cmd窗口只是理想和理想,但什么也没发生
- 成员函数不能为集合迭代器和const_iterator的输入重载(但可以为其他 STL 迭代器重载)
- int main = 0,已编译但崩溃
- std::to_chars在MacOS/clang上编译但不链接
- 为什么我们不能使用整数到字符串直接转换,但可以按位到字符串?
- 微控制器的首次 gcc 链接器脚本编译但不运行
- 为什么我不能写cout<<a==b;但可以写cout<<(a==b);
- 无法使用 Openvino 中间表示文件转发() 网络,但可以使用我正在制作 IR 的 ONNX 文件
- 设置具有非constexpr函数的constexpr变量(但可以在编译时间计算)
- 为什么我在使用 Qt creator 用 C 编译代码时出错,但可以使用 make 文件轻松做到这一点
- Boost 1_65_1 不能使用 OpenSSL 1.1.0g "undefined reference" 编译,但可以使用 "nm"
- Xcode 不使用 gtest 框架进行编译,但可以看到它
- 无法在 Linux 上编译C++代码,但可以在 Mac OS 上编译
- MSVC 中"vector<bool> iterator not dereferencable"错误,但在使用 g++ 编译时可以完美运行
- 这个模板"specialization"代码在做什么,为什么它可以编译但不能按预期工作?
- Makefile - main.o 未创建,但编译是可以的
- 多线程代码不会使用 g++ 进行编译,但可以使用 clang++
- 阿杜伊诺崇高文本 2.我可以编译但不能上传。错误"The system cannot find the file specified"