vector用作函数模板形参时出现的一个错误

C++7.2.3 、7.2.4vector形参、数组形参 简介======================================================================================================一、vector 类型的形参通常,函数不应该有vector或其他标准库容器类型的形参,调用含有普通的非引用vector形参的函数将会复制vector的每一个元素。从避免复制vector的角度出发 阅读详情

代码如下:

#include<iostream>
#include<string>
#include<vector>
#include<iterator>
using namespace std;

template<class T>
int find(vector<T> &vec,T data)
{
int index=0;
vector<T>::iterator iter;
for(iter=vec.begin();iter!=vec.end();iter++)
{
if(*iter==data)
break;
else
index++;
}

return index;
}

int main()
{
vector<int> vec1;
int i=0;
for(i=0;i<10;i++)
vec1.push_back(i);
vector<string> vec2;
vec2.push_back("zhang");
vec2.push_back("yong");
vec2.push_back("jian");
int ret;
ret=find(vec1,5);
if(ret==vec1.size())
cout<<"no found"<<endl;
else
cout<<"found,index="<<ret<<endl;
ret=find(vec2,string("kang"));
if(ret==vec2.size())
cout<<"no found"<<endl;
else
cout<<"found,index="<<ret<<endl;

return 0;
}

出现的错误如下:

16_9.cpp: In function `int find(std::vector<T, std::allocator<_CharT> >&, T)':
16_9.cpp:14: error: expected `;' before "iter"
16_9.cpp:15: error: `iter' was not declared in this scope
16_9.cpp: In function `int find(std::vector<T, std::allocator<_CharT> >&, T) [with T = int]':
16_9.cpp:38: instantiated from here
16_9.cpp:14: error: dependent-name ` std::vector<T,std::allocator<_CharT> >::iterator' is parsed as a non-type, but instantiation yields a type
16_9.cpp:14: note: say `typename std::vector<T,std::allocator<_CharT> >::iterator' if a type is meant
16_9.cpp: In function `int find(std::vector<T, std::allocator<_CharT> >&, T) [with T = std::string]':
16_9.cpp:43: instantiated from here
16_9.cpp:14: error: dependent-name ` std::vector<T,std::allocator<_CharT> >::iterator' is parsed as a non-type, but instantiation yields a type
16_9.cpp:14: note: say `typename std::vector<T,std::allocator<_CharT> >::iterator' if a type is meant

经过在Google上查询了一番,得知:

运用 vector<T>内部类型iterator时须要添加typename,加上typename后编译通过。
将上面代码中的红色部分改为下面的代码,编译没有错误。

typename vector<T>::iterator iter;
typename两种用法:

  1。用在模板声明中,如下两个声明是一样的:

template<class T> class Widget; // uses "class"
template<typename T> class Widget; // uses "typename"

  2.用于标识 nested dependent type name(嵌套依赖类型名)

[STM32]HAL STM32F103 软件I2C读写MPU6050(附DMP库移植) 本文介绍了如何在STM32F103C8T6上通过I2C协议与MPU6050传感器通信并实现DMP功能。首先,使用STM32CubeMX配置项目,设置时钟和I2C接口。然后,编写软件I2C协议的读写函数与MPU6050交互。接着,移植DMP库并进行必要修改,获取加速度计和陀螺仪数据,并将其转换为欧拉角显示在OLED上。最后,利用Keil的逻辑分析仪监测I2C时序。 阅读详情

相关推荐

保姆级教程:用Ansible 2.9自动化配置华为ENSP路由器(附Cloud连接避坑指南)

本文提供了一份详细的Ansible 2.9与华为ENSP路由器自动化配置教程,涵盖环境搭建、网络连通性配置、Playbook开发及典型问题排查。特别针对Cloud连接常见问题提供避坑指南,帮助运维工程师快速掌握网络自动化技能,提升工作效率。

weixin_42561476的博客 376

dependent-name ‘xxx::yyy’ is parsed as a non-type, but instantiation yields a type

简言之,就是说你该用typename的地方没用typename,如以下代码 1 template&lt;class Cont&gt; void frontInsertion(Cont&amp; ci) { 2 copy(a, a + sizeof(a)/sizeof(Cont::value_type), 3 front_inserter(ci)); 4 ...

weixin_34319640的博客 576

高通camera驱动 camx read xml 和 probe 流程 和 sensor I2C读写的波形图 (三)

Camx 刚接触的时候对于这个xml 一脸懵逼,实际上和mm-camera差不多就是以xml node节点的方式标准化了driver相关的code,exposure 和 gain的逻辑实现还是在同级目录的cpp中,并且将 xml 的解析工作放在了 out/target/<product>/gen/STATIC_LIBERARIES/libcamxgenerated_intermediates/generated/ 中主要是包含了: g_chromatix : tuning 相关xml的解析co

shangbolei的博客 1万+

XXX is parsed as a non-type, but instantiation yields a type 错误解决办法

最近在写程序的时候遇到了XXX is parsed as a non-type, but instantiation yields a type 的错误。程序上下文如下 template<typename FullKey,// base containe typename PolicyTraits > class container_with_policy {

easonchenys的专栏 2479

西门子S7-1200模拟量的使用

模块类型核心参数输入信号处理输出信号配置转换原理数值范围TIA Portal配置编程要点 转换公式: 输出模拟量: 五、校准与线性化 硬件校准非线性补偿抗干扰措施数字滤波温度控制压力监控流量调节信号异常精度不足实践操作参考文档项目案例借鉴博客

weixin_51020122的博客 4772

SD - WAN:企业出海的网络加速器

例如,一家中国的跨境电商企业,在欧美市场的促销活动期间,借助 SD - WAN 技术,即使面对海量订单数据的交互,也能确保欧美客户在浏览商品、下单支付时感受到近乎本地网络的流畅体验,大大提升了客户满意度,稳住了销售增速。企业无需在海外本地部署大量冗余服务器,只需依托云台,借助 SD - WAN 快速稳定的网络连接,即可轻松实现业务拓展,进一步精简运营架构,提升整体效能。在未来,随着技术的不断演进和企业出海需求的持续增长,SD - WAN 将持续赋能,助力更多企业在全球市场扬帆远航,书写辉煌篇章。

idcicp_com的博客 446

gcc中使用模板类的类的编译错误

撰写时间:2008年03月12日发布时间:2008年10月29日整理时间:2008年10月29日    最近在自己写的一段代码中,使用了模板类的类,即如下形式:    template    void func(A)    {        fun2(A::B());    }    即A是一个模板类型,同时使用了A域下的类型B,需要根据A的不同而构造相应的B的实体,进行传递。

snail8384的专栏 1063

深度学习暑期科研项目(两个月发EI论文)

对本科生而言,越早接触系统的科研训练开始上手科研项目,就越能在未来的升学求职中占据很大的优势。暑假是提升个人简历、丰富科研经历的最佳时期!哈尔滨工业大学博士师兄也会在8月1日开始带大家上手科研项目,并撰写发表EI会议论文。

Magnolia_He的博客 1443

使用std::vector容器中犯的一个错误

类似std::vector&lt; int*&gt;* vpInt; 这种声明需要注意的地方 当使用下列方式声明一个包含了指针元素(其实不一定是指针元素)的容器指针时 std::vector&lt;int*&gt;* vpInt=new std::vector&lt;int*&gt; int num=8,tmp=7; vpInt-&gt;push_back(&amp;int); vpInt...

少年磊的博客 1万+

SpyGlass Lint脚本实战:从环境配置到报告生成的完整流程解析

本文详细解析了使用SpyGlass Lint脚本进行数字芯片设计代码质量检查的完整自动化流程。从环境配置、目录结构设计,到核心TCL脚本的编写与模块化配置,再到脚本执行、调试技巧及报告解读,提供了构建健壮、可维护自动化检查框架的实战指南。文章重点阐述了如何通过脚本实现从环境配置到报告生成的一键式操作,并探讨了与企业级CI/CD流程集成的进阶方案。

weixin_29196613的博客 440

避坑指南:LISFLOOD-FP模型数据单位、参数文件与results文件夹结果解析全攻略

本文详细解析了LISFLOOD-FP洪水模拟模型的关键应用环节,包括数据单位校验、参数文件优化及结果文件解读与可视化。特别针对常见的单位混淆问题,提供了从DEM到边界条件的全面校验方法,并深入剖析了.par参数文件的配置技巧,帮助用户避免模型崩溃和结果失真。

weixin_42533622的博客 237

C++语言中std::array的神奇用法总结,你需要知道!

此文转载自:https://my.oschina.net/u/4526289/blog/4760178 大咖揭秘Java人都栽在了哪?点击免费领取《大厂面试清单》,攻克面试难关~>>> 摘要:在这篇文章里,将从各个角度介绍下std::array的用法,希望能带来一些启发。 td::array是在C++11标准中增加的STL容器,它的设计目的是提供与原生数组类似...

Python研究所 3066

推荐一个直接用于项目开发的PID库!很好用,很稳定

关注、星标公众号,不错过精彩内容大家好,我是小麦。最近有朋友问到有没有现成的C语言PID库。当然有了!现在我就准备给大家安利一下了。一般同学会去某度上搜,看到各种各样版本的PID示例,或者...

一名热爱技术的工程师的博客。分享技术干货,记录美好生活。永远相信美好的事情即将发生。 9025

C++ 错误: ‘std::vector<float> feat’的声明隐藏了一个形参

错误: ‘std::vector feat’的声明隐藏了一个形参 原因: 函数形参里有std::vector &feat参数,但是在函数中不小心又重新定义了变量std::vector feat;

u010555688的专栏 4361

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

c++中vector做形参传递问题

最近工作遇到了想传递vector容器的问题,于是找了很多资料查看了一下,自己也通过调试理解了一下, 代码: 如图:代码第69行定义了一个vector,然后我写了3个初始化容器的函数init_vector1,init_vector2和init_vector3 通过调试可以知道: init_vector1是无法给容器vec添加元素的,因为这里采用的是值传递,形参的改变无法影响到实参

三思而先行的博客 1万+

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

关于C++ vector的resize函数的错误使用

今天在写基数排序是需要使用形参来初始化数组,用到了vector.resize函数。 在每次循环中需要将数组复原,想使用resize的函数中的赋值功能偷懒。 发现在使用与原数组大小相同的参数时,函数并不会对已初始化的数组进行复制。 代码如下: int main() { void test(); test(); return 0; } void test() { vector<vector<int>> temp(10); for (int i = 0; i < 10

qq_28461431的博客 1859

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

vector类,so easy!

vector这个类就是属于STL的一部分,vector在这里是一个类类型的模板,简单来说,vector就是我们之前所学过的顺序表这个数据结构。

2301_81390458的博客 2899

bingc++模板、STL(string、vector、list)

下一篇 文章目录模板 模板 泛型编程:编写与类型无关的通用代码,是代码复用的一种手段。模板是泛型编程的基础。

二月鸟 1047

tensorflow实现rnn时碰到的一个小错误

ValueError: prefix tensor must be either a scalar or vector, but saw tensor: Tensor("Placeholder:0", dtype=int32) 这是rnn cell的zero_state函数引起的,查了一下,得到的答案是 batch_size = tf.placeholder(dtype=tf.int32, ...

xp1994816的博客 948

c++数组和vector传参问题

1.数组传参 错误代码: void bianli(string s,int& a[]) { int len=s.length(); for(int i=0;i<len;i++) { if(s[i]>=65&&s[i]<=90) a[s[i]-6...

随笔 1894

const vector *&vector_pointer报错

代码如下: C/C++ code// Es1.7.cpp : 定义控制台应用程序的入口点。////用指针来操作六个VECTOR的数列#include "stdafx.h"#include iostream>#includevector>using namespace std;//遍历VECTOR,传递过来的是指向VECTOR的指针void visit

朝着未来勇敢前进 2524

C++模板推导核心规则解析:从函数模板到auto与decltype实战

模板是C++泛型编程的基石,其核心机制在于编译期的类型推导。编译器根据调用时提供的实参,自动推断模板参数类型,这一过程遵循严谨的规则体系。理解模板推导原理,对于编写类型安全、高效且灵活的泛型代码至关重要,尤其在设计库接口、实现泛型算法和进行元编程时。其技术价值在于将运行时类型决策前置到编译期,提升性能与安全性。应用场景广泛,从STL容器的迭代器到完美转发包装器均依赖于此。本文聚焦于**函数模板推导**、**万能引用**以及**auto类型推导**这三大核心场景,通过剖析形参与实参的匹配规则,揭示编译器处理引

weixin_30780649的博客 327

C++函数模板调用规则与重载决议深度解析

在C++编程中,函数重载是实现多态性的基础机制,允许在同一作用域内定义多个同名函数。其核心原理在于编译器根据调用时实参的类型和数量,通过重载决议过程选择最匹配的函数版本。这一机制的技术价值在于提升代码的表达力和类型安全性,广泛应用于算法封装、库设计和API构建等场景。当引入函数模板后,情况变得更加复杂,模板实参推导与普通函数重载交织,容易产生调用歧义。理解模板特化、SFINAE机制以及C++20的Concepts特性,能帮助开发者编写出更健壮、高效的泛型代码,有效解决实际工程中的编译错误与设计难题。

axfcjwkbi259888707的博客 355

具有 __declspec(align('16')) 的形参将不被对齐

没用到,但应该有效!!!要改的内容太多 错误 1 error C2719: “_Val”: 具有 __declspec(align('16')) 的形参将不被对齐 C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\vector 717   对齐的结构无法使用stl vector解决方案 2009年11月26日 1

三少GG 9756

vector

原先的pos指向旧空间,如果发生扩容开辟了新空间,我们就要找到新空间中pos相对的位置,不然就会发生迭代器失效问题,程序会崩溃或者随机值,并且这种情况是偶发性的错误(如果不扩容那没什么问题)这里指针start不会是0号地址,0号地址是无效地址,所以while(pos>=start)条件会停下来,这是start.finsih,eof带给我们的优势。情况二,即使push_back不复用insert,在insert时如果发生扩容,就会产生问题插入一个随机值。

weixin_50809457的博客 455

【C++】vector的模拟实现(SGI版本)

迭代器失效,深层次的深拷贝,vector的构造、拷贝、赋值,函数匹配优先级导致的问题…

The porters of knowledge 1295
上一篇: int 转换成string 类型的方法
下一篇: windows 通过ssh连接linux
DylanZou
博客等级 码龄18年 13粉丝 9原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值