【问题标题】:Unable to hard code integer value into vector无法将整数值硬编码到向量中
【发布时间】:2017-02-25 07:56:00
【问题描述】:

我正在尝试使用 C++ 自学有关向量的知识。

据我所知,与数组相比,向量更加动态和高效。

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

所以我开始尝试将一些值硬编码为不同的向量数据类型,例如整数、字符串和双精度。

所以经过一些研究,我尝试将一些整数和双精度值硬编码到向量中,如下所示。

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 向量的工作方式有何不同会产生这样的错误。

【问题讨论】:

  • "" 中引用的任何内容都是 C++ 中的 string-literal。您的stockPrice 仅存储double,并且没有从 string-literaldouble 的这种隐式转换

标签: c++ vector


【解决方案1】:

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

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

如果你想在向量中stockPrice。应该是这样的

stockPrice.push_back(50.50);

代替

stockPrice.push_back("50.50");

【讨论】:

    【解决方案2】:

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

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

    顺便说一句,023 是 19 的八进制表示法。

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

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

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

    不要忘记在编译时启用所有警告和调试信息,例如如果使用GCC,则使用g++ -Wall -g 编译。一定要至少学习C++11(不是一些旧版本的标准)。如果您有一些 版本的g++,也许可以通过-std=c++11。我建议(在 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"};
    

    【讨论】:

    • 现在它返回了另一个错误,称为“{”标记之前不允许函数定义。
    • 你把函数粘贴到主函数中了吗?你不能在另一个函数中声明一个函数
    • 是的,我有。我将所有硬编码的数据输入到主函数中,例如int main() { std::vector&lt;int&gt; stockID {999}; }
    • @Kerndog73 并非所有编译器都支持不带 = 的 {}。当然我不能在 VS 中做到这一点。它是草稿的后期添加。错误消息听起来像是 big&hard 编译器对此的回答。
    猜你喜欢
    • 1970-01-01
    • 2015-06-21
    • 2020-06-17
    • 2013-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多