linasm-1.13 libraryを使用するOctave C++の.oct関数を作成しようとしていますが、/ usr/share/zoneinfo /からのtzdataの基本的な読み込みも機能しません。私の簡単なテスト機能は、これまでの私の理解では、ny_timeが認識されているオブジェクトではありませんが、私が試したことですmkoctfileでコンパイルするには、このエラーを与え、C++タイムライブラリとOctave .octファイル
#include <octave/oct.h>
#include <Time.h> // the linasm-1.13 library
DEFUN_DLD (tz, args, nargout,
"-*- texinfo -*-\n\
@deftypefn {Function File} {} tz (@var{YYYYMMDDHHMMSS})\n\
\n\
@end deftypefn")
{
octave_value_list retval_list ;
unsigned int tz ;
const char *ny_time = "/usr/share/zoneinfo/America/New_York" ;
tz = Time::LoadTimeZone(ny_time) ;
return retval_list ;
>> mkoctfile tz.cc
tz.cc: In function ‘octave_value_list Ftz(const octave_value_list&, int)’:
tz.cc:24:34: error: cannot call member function ‘unsigned int Time::LoadTimeZone(const char*)’ without object
tz = Time::LoadTimeZone(ny_time) ;
^
warning: mkoctfile: building exited with failure status
ですthis accepted SO answerで説明されているように、ny_timeを文字列リテラルとしてキャストします。
linasm pageのLoadTimeZoneの入力は、「必要な時間帯を記述するtzfileへのパス」である必要があるため、私はこのようにしています。どこが間違っていますか?
エラーメッセージから、まず 'Time'オブジェクトを作成し、そのオブジェクトで' LoadTimeZone'を呼び出す必要があるようです。したがって、 'Time'クラスの周りにOctaveラッパーを用意し、それを提供するためにOctaveコードを必要とするかもしれません。 –
ちなみに、ほとんどの場合、Swigは手作業でバインディングを書くよりもSwigを使うほうが好きです。Swigは、あなたの面倒な詳細を大量に処理します(Octaveバインディングの生成もサポートしています)。 –
C++ 11以降を使用している場合、考慮する可能性のある別のタイムゾーンライブラリがあります。https://howardhinnant.github.io/date/tz.html優れたドキュメントとサポートがあります。 –