Основные проблемы с вашим кодом (бесконечные рекурсивные вызовы) уже были правильно решены.
Использование явной области видимости, например
std::ofstream::put(lsb) && std::ofstream::put(msb);
это исправит.
Я хочу записать значения int16_t в файл.
Хотя у меня сложилось впечатление, что вы хотите записать двоичные числа в сетевом байтовом порядке (с прямым порядком байтов) в файл, а не ставить символы в виде текста , и это не то, что вы наконец пытаетесь достигать.
Вот как я бы подошел к этому ( независимо от текущей архитектуры машины ):
#include <fstream>
#include <arpa/inet.h>
struct Ofstream {
std::ofstream os;
Ofstream( const std::string & s) : os(s,std::ios_base::binary) {}
void put(uint16_t dt) {
uint16_t netdt = htons(dt);
os.write((char*)&netdt,sizeof(netdt))
}
};
int main() {
uint16_t val = 0x1234;
Ofstream ofile("test");
ofile.put(val);
}
Как правило, не рекомендуется наследовать от стандартных библиотечных классов, если они явно не предназначены для реализации (т. Е. std::ostream
).
Скорее используйте их как переменные-члены.