2013-02-20 3 views
0

Я знаю, что это может быть задано раньше, но, к сожалению, я не смог отладить ошибку.ошибка: ожидается `; ' до 'T'

я написал класс для времени:

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: error: expected `; ' перед «T»

4-5 класса time.cpp: 10: ошибка: «T» не был объявлен в этой области

Заранее спасибо за вашу помощь!

+1

Скомпилирует ли time.cpp (где вы реализовали элементы)? – molbdnilo

ответ

3

Похоже на имя вашего класса time это зарезервированное слово и не может быть использована , Если вы измените его на mytime, как я и сделал here, вы обнаружите, что он работает так, как ожидалось.

Мне нужно найти , почемуtime - это зарезервированное слово или то, что происходит.

По-видимому, ваше имя класса конфликтует с глобальной структурой ::time, которая будет иметь смысл, почему он не принят компилятором.

Если вы действительно хотите использовать класс time, вы должны создать собственное пространство имен и поместить его туда.

namespace tony { class time {}; } int main() { tony::time t; } Это должно устранить конфликт имен.

+0

Минимальный пример этой странной проблемы можно увидеть здесь [http://stacked-crooked.com/view? id = 6c51d05873cd2f7d5f51cf98c451ffc9) –

+0

Thats * awesome *. По крайней мере, clang достаточно хорош, чтобы сообщить мне. «Должен использовать« время класса »для обозначения типа« время »в этой области.» – WhozCraig

+1

Комбинация '#include ' и 'using namespace std; 'вытаскивает тысячи имен из стандартной библиотеки. Функция' std :: time() ', возможно, является одной из них. –

0

У вас есть опечатка в time.cpp в строке 22:

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

Должно быть:

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

Это хорошо заметили, но это не исправляет ошибку OP. –

+0

спасибо, но все еще есть ошибка. – user2090491

+1

Если вы видите опечатку, вы можете просто отредактировать сообщение (: –

0
#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 
1

Попробуйте переименовать файлы 'класс' от time.h/time.cpp к mytime.h/mytime.cpp

Там такая система, включаемый файл называется time.h и - в зависимости от включенный порядок поиска файлов, сконфигурированный для вашего компилятора, возможно, что системный файл будет включен в предпочтение вашему. Поэтому компилятор никогда не видит ваш класс Time вообще.

Смежные вопросы