1

これは以前に尋ねられる可能性があることは知っていますが、残念ながらエラーをデバッグできませんでした。

私は時間のクラスを書きました:

class time
{
public:
    time(); //constructor
    void setTime (int, int, int); //set time
    void dispTime();  //print time
private:
    int hour, minute, second;
};

次に、関数メンバーを実装します。

#include <iostream>
#include "stdio.h"
#include "time.h"
time :: time()
{
    hour = 12;
    minute = 0;
    second = 0;
}
//**********
void time::setTime(int h, int m, int s)
{
    hour = (h >= 0 && h < 12) ? h : 0;
    minute = (m >= 0 && m < 60) ? m : 0;
    second = (s >= 0 && s < 60) ? s : 0;
}
//**********
void time::dispTime()
{
    std::cout << ((hour == 0 || hour == 12) ? 12 : hour % 12)
              << " : " << (minute < 10 ? "0" : "") << minute
              << " : " << (second < 10 ? "0" : "") << second
              << (hour < 12 ? " AM" : " PM");
}

そして最後に、本体のメインは次のとおりです。

#include <iostream>
#include "stdio.h"
#include "time.h"
using namespace std;
//**********
int main()
{
    time T;
    cout << "The initial standard time is: ";
    T.dispTime();
    T.setTime(13, 27, 36);
    cout << "\nStandard time after set-time is: ";
    T.dispTime();
    T.setTime(99,83,12); //attemp to have a invalid time
    cout << "\nStandard time is invalid and standard time is: ";
    T.dispTime();
    cin.get();
    cin.get();
}

g ++でコンパイルすると:

4-5-class-time.cpp: 関数 'int main()' 内:

4-5-class-time.cpp:8: エラー: 予想される `;' 「T」の前</p>

4-5-class-time.cpp:10: エラー: 'T' はこのスコープで宣言されていません

よろしくお願いします。

4

4 に答える 4

4

クラスの名前はtime予約語のようで、使用できません。ここmytimeで行ったように、に変更すると、期待どおりに機能することがわかります。

なぜ time予約語なのか、何が起こっているのかを知る必要があります。

どうやらあなたのクラス名はグローバル構造体と競合している::timeようです。それはなぜそれがコンパイラによって受け入れられないのかについて意味があります。

本当にクラスを使用したい場合はtime、独自の名前空間を作成してそこに配置する必要があります。

namespace tony { class time {}; } int main() { tony::time t; }これにより、名前の競合が解消されます。

于 2013-02-20T09:39:50.803 に答える
2

「クラス」ファイルの名前を time.h/time.cpp から mytime.h/mytime.cpp に変更してみてください

time.h というシステム インクルード ファイルがあり、コンパイラ用に構成されたインクルード ファイルの検索順序によっては、システム ファイルが優先してインクルードされる可能性があります。したがって、コンパイラは Time クラスをまったく認識しません。

于 2013-10-02T21:56:41.040 に答える
1

22行目のtime.cppにタイプミスがあります。

<< " : " << (seconde < 10 ? "0" : "") << second

する必要があります:

<< " : " << (second < 10 ? "0" : "") << second
于 2013-02-20T09:39:45.627 に答える
1
#include <ctime>

namespace {
class time {};
}

int main()
{
    time();
}

エラーが発生します:

main.cpp: In function 'int main()':
main.cpp:9:5: error: reference to 'time' is ambiguous
In file included from /usr/include/c++/4.7/ctime:44:0,
                 from main.cpp:1:
/usr/include/time.h:186:15: error: candidates are: time_t time(time_t*)
main.cpp:4:7: error:                 class {anonymous}::time

匿名の名前空間を取り除くことで、あいまいさがなくなります。変:

main.cpp: In function 'int main()':
main.cpp:7:10: error: too few arguments to function 'time_t time(time_t*)'
In file included from /usr/include/c++/4.7/ctime:44:0,
                 from main.cpp:1:
/usr/include/time.h:186:15: note: declared here
于 2013-02-20T09:53:02.703 に答える