Visual studio:E0349 没有运算符<<匹配这些操作数(但代码中没有字符串)

Visual studio: E0349 no operator << matches these operands (but no strings in code)

本文关键字:lt 操作数 代码 字符串 studio E0349 运算符 Visual      更新时间:2023-10-16

无法编译我的代码 - 我得到:没有操作员"&lt;&lt;"匹配这些操作数

我发现类似问题没有操作员"&lt;&lt;&quot"匹配这些操作数,但是我没有字符串,也没有丢失的指令(我认为(

有人可以帮我吗?:(

#include "stdafx.h"
#include <iostream>
#include <math.h>
#include <iomanip> 
#include <vector>
void convBase(int base, int n);
using std::cout; 
using std::endl; 
using std::setw;
using std::vector;
int main()
{
    int numbs[] = { 61, 0, -9, -200, 9999 };
    int bases[] = { 16, 8, 2, 20, 36 };
    size_t size = sizeof(numbs) / sizeof(*numbs);
    for (size_t i = 0; i < size; ++i) {
        cout << setw(4) << numbs[i] << " = " << setw(5) 
        << convBase(numbs[i], bases[i]) << " in base " 
        << setw(2) << bases[i] << endl;
        }
    return 0;
}
void convBase(int n, int base) {
    char pierwszyZnak = 48;
    char pierwszaLitera = 65;
    vector<char> system;
    vector<char> liczba;
    for (int i = 0; i < base; i++) {
        if (i <= 9) {
            system.push_back(pierwszyZnak);
            pierwszyZnak++;
        }
        else if (i <= 36) {
            system.push_back(pierwszaLitera);
            pierwszaLitera++;
        }
        else {
            cout << "podales za duza liczbe: " << base << ". Musisz podac liczbe mniejsza badz rowna 36" << endl;
            return;
        }
    }
    while (n > 0) {
        int rem = n % base;
        int rem2 = floor(n / base);
        liczba.push_back(system[rem]);
        n = rem2;
    }
    for (unsigned int i = liczba.size(); i-- > 0; )
        std::cout << liczba[i];
}

convBase返回void,但是您正在尝试将其返回值流式传输到 std::cout。您的函数应默默地返回字符串表示形式。返回std::stringstd::ostream而不是void。

我建议创建一个std::stringstream,然后将您的输出流式传输。您可以用流的名称替换最后的std::cout,然后调用其str()方法以获取返回值。(您还应确保在给出不良字符时验证功能的行为。(