2016-10-03 8 views
-3

У меня есть два файла: DateTime.h и DateTime.cpp, которые показаны ниже:Возвращение строки из статической функции

DateTime.h

class DateTime 
{ 
public: 
    static string getCurrentTimeStamp(); 
}; 

DateTime.cpp

#include "stdafx.h" 
#include "DateTime.h" 
#include <ctime> 
#include <chrono> 
#include <iostream> 
#include <string> 
using namespace std; 

string DateTime::getCurrentTimeStamp() 
{ 
    return ""; 
} 

Мой компилятор (Visual Studio 2012) выплескивает ошибки в тот момент, когда у меня есть функция getCurrentTimeStamp() вернуть объект std::string. Все ошибки указывают на синтаксические проблемы, но ни один из них не ясен. Кто-нибудь понимает, почему это может быть так?

Обновление: здесь (некоторые из) ошибок.

Ошибка 6 Ошибка C2064: термин не вычисляется функция принимает 0 аргументы C: \ Users \ Антони \ документы \ код \ ConsoleApplication1 \ datetime.cpp 21 1 ConsoleApplication1

Ошибка 1 Ошибка C2146: синтаксическая ошибка: отсутствует ';' перед идентификатором 'getCurrentTimeStamp' c: \ users \ anthony \ documents \ code \ consoleapplication1 \ datetime.h 5 1 ConsoleApplication1

Ошибка 7 ошибка C2146: синтаксическая ошибка: отсутствует ';' перед тем идентификатором 'getCurrentTimeStamp' C: \ Users \ Антони \ документы \ код \ ConsoleApplication1 \ datetime.h 5 1 ConsoleApplication1

Ошибка 5 Ошибка C2371: 'DateTime :: getCurrentTimeStamp': переопределение; различные основные типы C: \ Users \ Антони \ документы \ код \ ConsoleApplication1 \ datetime.cpp 10 1 ConsoleApplication1

+1

Отсутствующие #include mascoj

+0

Вы просто использовать '#include ' и 'зЬй :: string' как требуется? –

+1

Это может помочь, если вы сообщите нам, что такое ошибки? – Galik

ответ

2

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

#include директива препроцессора, поэтому компилятор не видит, а компилятор видит предварительно обработанный вывод файла, который вы пытаетесь включить.

Так что ваш код будет выглядеть примерно так:

#include "stdafx.h" 

    //#include "DateTime.h" 
    class DateTime 
    { 
    public: 
     static string getCurrentTimeStamp(); 
    }; 
    //#include "DateTime.h" 

    #include <ctime> 
    #include <chrono> 
    #include <iostream> 
    #include <string> 
    using namespace std; 

    string DateTime::getCurrentTimeStamp() 
    { 
     return ""; 
    } 

http://rextester.com/MODV66772

Когда я пытаюсь скомпилировать это на онлайн Visual Studio RexTester, я получаю очень разные ошибки, говоря мне, что ваш stdafx.h ISN» t пусто.

Если я изменить код немного:

//#include "stdafx.h" 

    //#include "DateTime.h" 
    #include <string> 

    class DateTime 
    { 
    public: 
     static std::string getCurrentTimeStamp(); 
    }; 
    //#include "DateTime.h" 

    #include <ctime> 
    #include <chrono> 
    #include <iostream> 
    #include <string> 
    using namespace std; 

    string DateTime::getCurrentTimeStamp() 
    { 
     return ""; 
    } 

Теперь это компилируется без ошибок/предупреждений, вы сообщаете: http://rextester.com/PXE62490

изменения:

  • включают в заголовочном файле , поскольку от этого зависит заголовок,
  • std::string вместо string ,

Компилятор C++ является однопроходный компилятор, поэтому заголовочный файл не может знать, что вы намерены делать using namespace std позже, и даже если он сделал, это страшная практика, потому что std имен плотно населен.

Если вы абсолютно не можете набрать std:: повсюду, попробуйте using имена, которые вам нужны, например.

using std::string; // string no-longer needs to be std::string 
+0

Может быть, 'DateTime.h' был включен в' stdafx.h'? –