Как я могу исправить эту ошибку?«Метод str не может быть разрешен» - PullRequest
0 голосов
/ 04 июня 2018

В чем смысл этой проблемы и как я могу ее исправить?
Похоже, что она не соответствует функции str(), пока я пытаюсь ее использовать.
На самом деле, я хочу взять "string "from rhs и поместить его в this->file, так что если у вас есть альтернативная идея, это тоже хорошо.

Метод 'str' не может быть разрешен
Метод 'c_str'не может быть решена

#include <cstdio>
#include <iostream>
#include <sstream>

class MyFile {
    FILE* file;
    MyFile& operator=(const MyFile& rhs) const;
    MyFile(const MyFile& rhs);
public:
    MyFile(const char* filename) :
            file(fopen(filename, "w")) {
        if (file == NULL) {
            throw std::exception();
        }
    }
    ~MyFile() {
        fclose(file);
    }

    template<typename T>
    MyFile& operator<<(const T& rhs) {
        std::ostringstream ss;
        ss << rhs;
        if (std::fputs(ss.str().c_str(), this->file) == EOF) { // Method 'str' could not be resolved
            throw std::exception();
        }
        return *this;
    }
};

Ответы [ 2 ]

0 голосов
/ 04 июня 2018
    std::ostringstream oss;
    FILE *file;
    std::string s = oss.str();
    std::cout << s << '\n';
    std::fputs(s.c_str(), file);

скрыть ostringstream в std :: string и затем преобразовать в const char *

0 голосов
/ 04 июня 2018

Вы уверены, что str() - это функция, которая не может быть разрешена?Вместо этого я предполагаю, что fputs() не может быть решена.Причина в том, что fputs ожидает const char*, но вы даете ему std::string, который возвращается str().Попробуйте fputs(ss.str().c_str(), this->file).

...