无法将整数值硬编码到矢量中

时间:2017-02-25 07:56:00

标签: c++ vector

我试图使用C ++自我学习矢量。

据我所知,与数组相比,矢量更具动态性和效率。

对于我的练习,我尝试将不同数据类型的值存储到向量中,并从向量中打印这些值。

所以我开始尝试将一些值硬编码到不同的向量数据类型中,例如integer,string和double。

因此经过一些研究后,我试图将一些整数和双值硬编码到向量中,如下所示。

std::vector<int> stockID = {023}; 

std::vector<double> stockPrice;
stockPrice.push_back("50.50");

std::vector<int> stockChange =  {100}; 

std::vector<int> transactionDate = {151212};

但是它返回了一个名为conversion of int/double to non-scarlar type的错误。

然而,当我尝试将值硬编码到矢量字符串中时,它似乎没有任何问题。

std::vector<string> stockItem; 
stockItem.push_back("Samsung Phone");

std::vector<string> category;
category.push_back("Electronic");

std::vector<string> subCategory;
subCategory.push_back("Mobile Phone");

我可以问一下,字符串向量与int和double向量的工作方式有何不同,以产生这样的错误。

2 个答案:

答案 0 :(得分:2)

正如问题评论部分中的whiZTiM所指出的那样。

  

""中引用的任何内容都是C ++中的字符串文字。您的stockPrice仅存储double,并且没有从字符串文字到double的隐式转换

如果你想要在向量stockPrice中。它应该像

stockPrice.push_back(50.50);

而不是

stockPrice.push_back("50.50");

答案 1 :(得分:0)

您可能想要调用constructor of vector,因此请删除一些=符号:

std::vector<int> stockID{023}; 

BTW,023是19的八进制表示法。

当然,pusk_back是一个成员函数,因此您只能在某个函数体内调用它(作为语句),并且需要传递适当的类型。显然,"50.50"是一个字符串文字,而不是浮点文字。所以这应该有效:

void f() {
  std::vector<double> stockPrice;
  stockPrice.push_back(50.50);
}

假设它出现在顶层(不在另一个函数体内)。

不要忘记启用所有警告&amp;编译时调试信息,例如如果使用GCC,则使用g++ -Wall -g进行编译。请务必至少学习C++11(不是标准的旧版本)。如果你有一些版本的-std=c++11,也许可以通过g++。我建议(2017年2月)至少使用一些GCC 6

  

我正在尝试使用C ++自我学习矢量。

不要研究向量,而是学习整个C ++(C ++ 11或C ++ 14)编程语言(这是一种困难而复杂的编程语言)。所以请阅读最新版本的例如Programming -- Principles and Practice Using C++并查看了一些C++ reference网站。

在C ++中查看一些现有 free software的源代码(例如在github上)(确保它是最新的和真正的C ++ 11或更高版本)

顺便说一下,这应该可行

 std::vector<std::string> category{"Electronic","Furniture"};