C++新手求助:Auto类的使用

oxygensun 2018-09-26 11:28:55
之前一直用的C#,对C++一直没有学习过。
最近搞一个项目,需要用OpenCV的Aruco模块。貌似所有的资源都是C++的,没办法,硬着头皮上了。

小弟在CSDN上下载了“东城飘雪”的一份示例代码“ARUCO-vs2010编译版本”
但是死活编译无法通过啊。

很多的错误,小白抓狂中。

其中一个大量的错误,是auto的使用,实例如下:

实例1:
    for(auto m:msconf)
_map_mm.insert(make_pair(m.id,m));”


实例2:
    //get image limits
cv::Point pmin(std::numeric_limits<int>::max(),std::numeric_limits<int>::max()),pmax(std::numeric_limits<int>::lowest(),std::numeric_limits<int>::lowest());
for(auto b:*this){
for(auto p:b){
pmin.x=min(int(p.x),pmin.x);
pmin.y=min(int(p.y),pmin.y);
pmax.x=max(int(p.x+0.5),pmax.x);
pmax.y=max(int(p.y+0.5),pmax.y);
assert(p.z==0);
}
}


错误如下:




我查了一下aoto类型的使用,属于编译器自动识别类型。这么用好像也确实符合语法规范,不明白错误在哪里,请大侠指点一二。

...全文
498 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
jiht594 2018-09-30
  • 打赏
  • 举报
回复
vs2010支持auto 但是不支持for (:)这种形式。
自己改成一般的for循环就行了吧。或者用高版本vs编译试试,应该可以的
hongwenjun 2018-09-30
  • 打赏
  • 举报
回复
range-for loop executes loop over range (since C++11) vc2010 只是部分支持 TR1, 下面这个C++11代码就编译不过去
#include <iostream>
#include <vector>
 
int main() {
    std::vector<int> v = {0, 1, 2, 3, 4, 5};
 
    for (const int& i : v) // access by const reference
        std::cout << i << ' ';
    std::cout << '\n';
 
    for (auto i : v) // access by value, the type of i is int
        std::cout << i << ' ';
    std::cout << '\n';
 
    for (auto&& i : v) // access by reference, the type of i is int&
        std::cout << i << ' ';
    std::cout << '\n';
 
    for (int n : {0, 1, 2, 3, 4, 5}) // the initializer may be a braced-init-list
        std::cout << n << ' ';
    std::cout << '\n';
 
    int a[] = {0, 1, 2, 3, 4, 5};
    for (int n : a) // the initializer may be an array
        std::cout << n << ' ';
    std::cout << '\n';
 
    for (int n : a)  
        std::cout << 1 << ' '; // the loop variable need not be used
    std::cout << '\n';
 
}
oxygensun 2018-09-30
  • 打赏
  • 举报
回复
各位:我尝试使用了VS2017的版本,编译确实通过了。
照各位的建议,直接试了2017,既然编译通过,也就没有再去尝试其它版本。
本人才疏学浅,对C++几无所知,得到各位指点,荣幸之至。
特此结贴,非常感谢。
啊大1号 2018-09-29
  • 打赏
  • 举报
回复
引用 12 楼 hdt 的回复:
[quote=引用 11 楼 a3192048 的回复:]
[quote=引用 10 楼 hdt 的回复:]
[quote=引用 9 楼 a3192048 的回复:]
[quote=引用 8 楼 hdt 的回复:]
[quote=引用 7 楼 a3192048 的回复:]

VS2010开始已经支持auto了

支持不代表完全符合c++11的标准[/quote]
没说VS2010完全支持C++11,也没有任何编译器敢说自己100%支持吧。楼主贴的代码不全,但应该不是auto的问题[/quote]
既然会看msdn,请看仔细,而不是断章取义
vs2010的auto 变量声明是必须初始化,否则会报C3531错误[/quote]

对于auto而言,其在于type deduce,它不会允许没有初始化值的声明,这是任何支持auto编译器都应该遵守的,而不是仅仅VS2010[/quote]
我可能说的不太准确。
例如下面的代码
vector<int> vec;
...
for(auto n:vec)
{}
在 vs2010会报 c3531[/quote]
嗯嗯。真是这样那可能就是VS2010的缺陷了,但楼主拿的是“ARUCO-vs2010编译版本",说明vs2010应该编译通过了的
真相重于对错 2018-09-28
  • 打赏
  • 举报
回复
引用 7 楼 a3192048 的回复:


VS2010开始已经支持auto了

支持不代表完全符合c++11的标准
啊大1号 2018-09-28
  • 打赏
  • 举报
回复


VS2010开始已经支持auto了
真相重于对错 2018-09-28
  • 打赏
  • 举报
回复
引用 11 楼 a3192048 的回复:
[quote=引用 10 楼 hdt 的回复:]
[quote=引用 9 楼 a3192048 的回复:]
[quote=引用 8 楼 hdt 的回复:]
[quote=引用 7 楼 a3192048 的回复:]

VS2010开始已经支持auto了

支持不代表完全符合c++11的标准[/quote]
没说VS2010完全支持C++11,也没有任何编译器敢说自己100%支持吧。楼主贴的代码不全,但应该不是auto的问题[/quote]
既然会看msdn,请看仔细,而不是断章取义
vs2010的auto 变量声明是必须初始化,否则会报C3531错误[/quote]

对于auto而言,其在于type deduce,它不会允许没有初始化值的声明,这是任何支持auto编译器都应该遵守的,而不是仅仅VS2010[/quote]
我可能说的不太准确。
例如下面的代码
vector<int> vec;
...
for(auto n:vec)
{}
在 vs2010会报 c3531
幻夢之葉 2018-09-28
  • 打赏
  • 举报
回复
12 14 15 17都有人推荐了,那不如用VS2013试试?
棉猴 2018-09-28
  • 打赏
  • 举报
回复
auto是C++11的新特性,换成VS2015试试
啊大1号 2018-09-28
  • 打赏
  • 举报
回复
引用 10 楼 hdt 的回复:
[quote=引用 9 楼 a3192048 的回复:]
[quote=引用 8 楼 hdt 的回复:]
[quote=引用 7 楼 a3192048 的回复:]

VS2010开始已经支持auto了

支持不代表完全符合c++11的标准[/quote]
没说VS2010完全支持C++11,也没有任何编译器敢说自己100%支持吧。楼主贴的代码不全,但应该不是auto的问题[/quote]
既然会看msdn,请看仔细,而不是断章取义
vs2010的auto 变量声明是必须初始化,否则会报C3531错误[/quote]

对于auto而言,其在于type deduce,它不会允许没有初始化值的声明,这是任何支持auto编译器都应该遵守的,而不是仅仅VS2010
真相重于对错 2018-09-28
  • 打赏
  • 举报
回复
引用 9 楼 a3192048 的回复:
[quote=引用 8 楼 hdt 的回复:]
[quote=引用 7 楼 a3192048 的回复:]

VS2010开始已经支持auto了

支持不代表完全符合c++11的标准[/quote]
没说VS2010完全支持C++11,也没有任何编译器敢说自己100%支持吧。楼主贴的代码不全,但应该不是auto的问题[/quote]
既然会看msdn,请看仔细,而不是断章取义
vs2010的auto 变量声明是必须初始化,否则会报C3531错误
啊大1号 2018-09-28
  • 打赏
  • 举报
回复
引用 8 楼 hdt 的回复:
[quote=引用 7 楼 a3192048 的回复:]


VS2010开始已经支持auto了

支持不代表完全符合c++11的标准[/quote]
没说VS2010完全支持C++11,也没有任何编译器敢说自己100%支持吧。楼主贴的代码不全,但应该不是auto的问题
飞机君 2018-09-27
  • 打赏
  • 举报
回复
编译器的问题,vs2014以上试试?
真相重于对错 2018-09-27
  • 打赏
  • 举报
回复
你用的vs2010吧,对c++11支持不好
改用vs2017
@风轻云淡_ 2018-09-27
  • 打赏
  • 举报
回复
语法本身并没有错,错的可能是后面的集合,是不是你没有包含相关头文件或者相关声明,导致msconf,*this 等编译器无法识别类型从而无法判断?
上山老人 2018-09-27
  • 打赏
  • 举报
回复
编译器的问题,vs2012以上试试?

64,281

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧