2010-11-29 24 views
3

私は、現在の2つのクラスレベルメンバ変数をとり、それらをtimeval構造体に設定し、timeval obj(値で)を返す関数を持っています。C++設定timevalメンバー

クラスレベルメンバのtimevalオブジェクトを設定するときと、各get()呼び出しで新しいtimevalオブジェクトを作成するときに問題が発生しています。クラス内

protected: 
int time[2]; 
timeval tv; 

// work done on setting the time array 

timeval getTimeval() 
{ 
    tv.tv_sec = (time_t)time[0]; 
    tv.tv_usec = time[1]; 
    return tv; 
} 

これは正しい体timeval値を返しません。 tv.tv_secは上書きされますが、tv_usecは一定のままです。しかし、getコールの中でtimevalオブジェクトを作成すると、正しい値が返されます。

メンバー変数のtimevalオブジェクトを新しいオブジェクトの作成とその値の設定とは異なるものにする理由はありますか?

+0

tv_usecにはタイプキャストが必要ですか? – rplusg

+1

これらの2つのケースで違いはありません。問題は残りのコードにあります。 'tv.tv_usec = time [1];でブレークポイントを設定すると、tv.tv_usecは変更されていないことがわかりますか? – Dialecticus

+1

問題の最小限の、コンパイル可能な例を投稿できますか? –

答えて

6
  • あなたはどこか別の場所(未定義の動作)何かを破損してきた任意のチャンス?
  • スレッドを使用していますか?もしそうであれば、第1のアプローチは2つのスレッドを同時にクラスメンバー 'tv'上で動作させることができるが、第2のアプローチはそれぞれのスレッドがそれ自身のローカルタイムインスタンスで動作する。

しかし、ここでクラスメンバーとしてタイムゾーンを使用する理由はありません。 (別のインスタンスを構築するのを避けるために、クラスメンバを値ではなく参照で返さなければならない)ので、クラスの各インスタンス内にスペースを無駄にしているだけです。 (値で時間を返すことは特にコストがかかりません;スタック割り当てされた小さなPOD構造体です)

しかし、最初にint配列から値が始まるのはなぜですか?なぜちょうどにはtimevalデータメンバがあり、それを直接操作します(アクセッサのconst参照によって返す)?

0
//header file header_1.h 
#include <time.h> 

class header_1{ 

protected: 
    int time[2]; 
    timeval tv; 
public: 
    timeval getTimeval(); 
    void setTimeval(); 

}; 


// header_1.cpp : Defines the entry point for the console application. 
// 

#include "stdafx.h" 
#include <vector> 
#include "header_1.h" 

using namespace std; 
int _tmain(int argc, _TCHAR* argv[]) 
{ 
    timeval tv_temp; 
    header_1 t1; 
    t1.setTimeval(); 
    tv_temp = t1.getTimeval(); 


    return 0; 
} 

timeval header_1::getTimeval() 
{ 
    tv.tv_sec = (time_t)time[0]; 
    tv.tv_usec = time[1]; 
    return tv; 
} 

void header_1::setTimeval() 
{ 
    time[0] = 100; 
    time[1] = 111; 
} 

これは私のために正常に動作しているあなたのコードに問題がある場合、私は理解していません。だから、実際の問題を知らせるためにあなたのコメントを(またはこのコードを編集して)与えてください。

+0

これはコメントに属しているようです。 – jwueller

+0

@elusive、コメントにコードリストを投稿する方法を提案しますか?もしあなたができても、あなたはしたいですか? –

+0

@Alex:ペーストビンや友達はどうですか? – jwueller