-1

現在、コードのこのセクションを C から C++ に移植しようとしています。基本的に、snprintf ステートメントを C++ 実装に置き換えます。

   if (len > 0)                        // If statement for 0 length buf error
    {
        localTime(tv, &etime2);

        // Printing to the supplied buffer in the main program
        char timebuf[80];               // Buffer to hold the time stamp
        oststream oss(timebuf, sizeof(timebuf));

        oss << etime2.et_year << ends;
        cout << timebuf << endl;
//      snprintf(buf, len, "%02i %s %02i %02i:%02i:%02i:%03i",
//      etime2.et_year, month[etime2.et_mon], etime2.et_day, etime2.et_hour,
//      etime2.et_min, etime2.et_sec, etime2.et_usec);

オリジナルをコメントアウトしたsnprintfので参考までに。cout、OSS、およびを使用して、その正確な文字列を出力する必要がありoststreamます。適切なヘッダー、、、および「using namespace std;」を含めましiostreamstrsteam。ただし、「make」を使用して実行すると、次のエラーが発生します

g++ -g -Wno-deprecated -c fmttime.cc fmttime.o
fmttime.cc:14:22: error: strsteam.h: No such file or directory
fmttime.cc:15:21: error: iosteam.h: No such file or directory
fmttime.cc: In function 'char* formatTime(timeval*, char*, size_t)':
fmttime.cc:273: error: 'oststream' was not declared in this scope
fmttime.cc:273: error: expected ';' before 'oss'
fmttime.cc:275: error: 'oss' was not declared in this scope
fmttime.cc:275: error: 'ends' was not declared in this scope
fmttime.cc:276: error: 'cout' was not declared in this scope
fmttime.cc:276: error: 'endl' was not declared in this scope
make: *** [fmttime.o] Error 1

これが参考のための私のmakeドキュメントです。

#Variables
PROGRAM = plot
OBJS = plot.o fmttime.o
CXXFLAGS = -g -Wno-deprecated
LIBS = -lm -lcurses

#Rules
all : ${PROGRAM}

${PROGRAM} : ${OBJS}
        g++ ${OBJS} ${LIBS} -o ${PROGRAM}

%.o : %.cc
        g++ ${CXXFLAGS} -c $< $@

clean:
        rm ${OBJS} ${PROGRAM}

だから私はすべてを試してきました.hをヘッダーの後に含めましたが、C++では必要ないことを知っています. なぜそれが私に言っているのか理解できずiostreamstrstream範囲外です...

4

2 に答える 2

2

非推奨の (およびスペルミスのある) ヘッダーを使用しています。

代わりに<sstream>andを使用してください。<iostream>

于 2013-04-14T20:01:04.777 に答える
1

タイプミスがあります:

oststream //^^typo

正しいヘッダー ファイルを含める必要があります。

 #include <iostream>
 #include <sstream> //not strstream, deprecated

正しい名前空間 std:

std::cout;
std::endl;

または名前空間 std を使用します。

于 2013-04-14T20:01:27.930 に答える