没有与这些操作数匹配的“<<”运算符

问题

在使用cout << pArray.at(2) << endl; 对变量进行输出的时候,遇到这样的报错。

问题背景

程序是定义一个Point类函数,在主程序中定义一个向量,分别压入三个Point内容后,再对向量中的内容进行输出。 要想输出向量中的第几个元素,这里采用的是pArray.at(2); //代表向量中的第二个内容.

我本来打算直接通过cout进行输出,cout << pArray.at(2) << endl;,但就出现了上述的报错。

#include <iostream>
#include <vector>
using namespace std;
class Point
{
public:
    Point(double x = 0, double y = 0);
    void Set(double x, double y);
    void Display();
private:
    double m_x;
    double m_y;
};
Point::Point(double x, double y)
{
    m_x = x;
    m_y = y;
}
void Point::Set(double x, double y)
{
    m_x = x;
    m_y = y;
}
void Point::Display()
{
    cout << "(" << m_x << "," << m_y << ")" << endl;
}
int main()
{
    Point p(5, 1), p1(0, 2), p2(1, 4);
    vector<Point> pArray;
    pArray.push_back(p);
    pArray.push_back(p1);
    pArray.push_back(p2);
    pArray.at(2);           
    cout << pArray.at(2) << endl; //输出为{0,2};
    return 0;

}

问题调试

我也是刚接触C++,cout无法进行输出,我首先直接搜索报错原因,除了添加头文件,并没有有效的信息。于是我直观的怀疑是不是 pArray.at(2)调取向量元素的方式不对,没规矩的瞎改了一通也无法输出。

接下来我就怀疑pArray的内容不对,导致其无法输出,所以想要查看其局部变量的具体值。

查看局部变量值

c++代码调试,vs调试工具,局部变量窗口,自动窗口_优秀的邓宗磊的博客-CSDN博客_vs局部变量窗口

在 WinDbg 中查看和编辑局部变量 - Windows drivers | Microsoft Docs

如何查看局部变量的值,打开调试窗口中并没有发现有局部变量值这个窗口。

搜了一下说是要使VS处于调试状态,不是点击开始调试,程序就处于调试状态,而是要通过Ctrl+Fn+F10才能将程序处于调试状态,鼠标在程序中的点选位置是程序调试的截止点,这样就才可以看到局部变量的窗口,看到局部变量的内含值是什么。

更改输出方式

我查看了下pArray中的内容,发现 pArray.at(2)是一个Point类,里面内含两个double型参数,所以cout不能正常的输出应该是因为pArray.at(2)包含两个元素{m_x m_y}无法同时输出,再翻看下Point类函数定义中的Display函数,发现要想正常的输出(x,y),应该是组合输出的, cout << "(" << m_x << "," << m_y << ")" << endl;所以要想看到这样的结果需要调用Display函数。

 所以我将输出句改成

    pArray.at(2).Display();

这样就可以正常的输出了。

问题总结:

遇到cout无法正常输出的问题时,在输出格式没有问题的前提下,需要查看要输出变量局部变量的内容和类型是什么,对于多个变量同时的输出,可以定义输出函数,调用函数输出。

遇到问题不要捉瞎,没有依据的乱猜测,逮到什么算什么,在百度的时候可以先想一想,可能是什么原因,是如何到导致的,否则百度出来的结果是在不同背景下的结论千奇百怪,越搜越多自己就被绕进去了,浪费了很多时间,不要着急,动脑筋先想清楚再做,或许这比找到答案更关键。

好啦,就这么多了,如果我的博文有帮到你,请点赞给我加油呀,也谢谢在解决问题过程中参考的诸位大佬们啦~

猜你喜欢

转载自blog.csdn.net/MOZHOUH/article/details/125220242
今日推荐