Lewat sini

#include <sstream>

void f(void)
{
    std::stringstream ss;
    ss << "hello";
}

Semuanya berjalan baik-baik saja. Tapi dengan cara ini, dengan tanda kurung tambahan

#include <sstream>

void f(void)
{
    std::stringstream ss();
    ss << "hello";
}

Saya mendapat kesalahan kompiler:

[Error] invalid operands of types 'std::stringstream() {aka std::basic_stringstream<char>()}' and 'char' to binary 'operator<<'

Bagaimana itu?

c++
0
user26742873 6 Juli 2020, 10:24

1 menjawab

Jawaban Terbaik

Ini adalah masalah lama di C++.

stringstream ss();

Dapat diartikan dalam dua cara. Sebagai deklarasi objek ss bertipe stringstream menggunakan konstruktor default, atau fungsi ss mengembalikan stringstream dan tidak mengambil parameter.

Kompiler memilih deklarasi fungsi, yang di sini (dan, menurut pengalaman saya, biasanya) bukanlah yang dimaksudkan oleh programmer.

Solusinya adalah dengan melewatkan tanda kurung untuk konstruksi default:

stringstream ss;

Atau gunakan inisialisasi kurung kurawal C++:

stringstream ss{};
3
Jasper Kent 6 Juli 2020, 07:27