bbjjppll 2024-06-02 14:41 采纳率: 0%
浏览 37

c++'cout' : ambiguous symbol怎么解决?

请教一下c++ error C2872: 'cout' : ambiguous symbol怎么解决?

源代码

#include <iostream>
 #include <cmath>
 using namespace std;
 int main()
 {
  float a,b,c,disc;

  cout<<"please input a,b,c:";
  cin>>a>>b>>c;
 if (a==0)
    cerr<<"a is equal to zero,error!"<<endl;//将有关出错信息插
 else if ((disc=b*b-4*a*c)<0)

    cerr<<"disc=b*b-4*a*c<0"<<endl; //将有关出错信息插入
   else {
   cout<<"x1="<<(-b+sqrt(disc))/(2*a)<<endl;
    cout<<"x2="<<(-b-sqrt(disc))/(2*a)<<endl;
   }
   return 0;
 }

  • 写回答

5条回答 默认 最新

  • 檀越@新空间 2024-06-02 14:41
    关注

    下午好🌅🌅🌅
    本答案参考ChatGPT-3.5

    问题分析: 在C++中,"cout"是输出流对象,它在命名空间std中有两种定义方式:一种是在头文件iostream中定义的std::cout(标准输出流),另一种是在头文件iosfwd中定义的std::basic_ostream< _CharT, _Traits >的类模板实例化对象。

    在使用using namespace std;指令后,编译器会在前述两个定义中查找"cout"的符号,由于这两个定义都存在,就会引发编译错误"ambiguous symbol"。

    解决方案:

    1. 不使用using namespace std;,而是使用std::cout来指代cout输出流对象:
    std::cout << "please input a,b,c:";
    
    1. 在代码中使用using声明,而不是使用using namespace指令,这样只引入所需的符号,避免引起冲突:
    using std::cout;
    using std::cin;
    
    1. 将std命名空间改为具体的标识符:
    std::cout << "please input a,b,c:";
    

    修改后的代码示例如下:

    #include <iostream>
    #include <cmath>
    
    int main()
    {
        float a, b, c, disc;
    
        std::cout << "please input a,b,c:";
        std::cin >> a >> b >> c;
        if (a == 0)
            std::cerr << "a is equal to zero, error!" << std::endl;
        else if ((disc = b * b - 4 * a * c) < 0)
            std::cerr << "disc=b*b-4*a*c<0" << std::endl;
        else {
            std::cout << "x1=" << (-b + std::sqrt(disc)) / (2 * a) << std::endl;
            std::cout << "x2=" << (-b - std::sqrt(disc)) / (2 * a) << std::endl;
        }
    
        return 0;
    }
    
    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 6月2日