C ++,简单函数,不合理错误?

时间:2015-09-03 21:16:40

标签: c++ debugging

所以我有这段代码:

#include <iostream>
#include <string>
#include "secondary.h"
using namespace std;

void printNumber(int x = 1, float z = 1.01);

int main(){
    int a = 54;
    float b = 39.1243;

    printNumber(a);
}

void printNumber(int x, float z){
    cout << x, z << endl;
}

由于我已将float z的默认值设置为1.01,因此如果我不输入这两个参数,则不会出现错误。然而,它给了我这个错误:

  

错误:类型为'float'和''为二元'运算符的无效操作数&lt;&lt;'&lt;'

2 个答案:

答案 0 :(得分:4)

#include <iostream>
#include <string>
#include "secondary.h"
using namespace std;

void printNumber(int x = 1, float z = 1.01);

int main(){
    int a = 54;
    float b = 39.1243;

    printNumber(a);
}

void printNumber(int x, float z){
    cout << x << z << endl;
    cout << x << "," << z << endl; //alternative
}

,更改为<<

答案 1 :(得分:1)

Cyber​​Guy已经(立即)提供了解决方案,我将添加一个关于operator precedence和逗号运算符(具有最低优先级)如何在此处扮演角色的解释。

这是受影响的一行:

cout << x, z << endl;

下一行是等效的,并强调运算符优先级:

(cout << x), (z << endl);

如果您想更进一步,可以删除逗号运算符并拆分语句:

cout << x; // valid (although no flush)
z << endl; // invalid code

std::endlstream manipulator,实际上是一个函数,std::basic_ostream为它们定义了第9个成员operator<<重载。没有这样的operator<<接受float

template<class CharT, class Traits>
std::basic_ostream<CharT, Traits> &endl(std::basic_ostream<CharT, Traits> &os);

- std::endl的声明。