2011-06-17 7 views
0
#include <iostream> 
#include <iomanip> 

using namespace std; 

double distance(double, double); 

int main() 
{ 
    double rate, time, distanceValue; 

    cout << fixed << showpoint << setprecision(1); 

    cout << "Enter rate" << endl; 
    cin >> rate; 

    cout << "Enter time" << endl; 
    cin >> time; 

    distanceValue = distance(rate, time); 

    cout << "The distance is " << distanceValue << endl; 
} 

double distance (double num1, double num2) 
{ 
    return num1 * num2; 
} 

Когда я пытаюсь скомпилировать его, я вижу длинный список ошибок. Я не понимаю, что здесь не так! также, если я изменю метод от double до int value, он хорошо работает !! Зачем??Я не могу напечатать двойное значение в следующем коде?

следующее сообщение об ошибке:

*> C: \ Users \ kifcaliph \ Desktop \ начиная

out with c++\Chapter6>cl 06_012.cpp 06_012 Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 16.00.30319.01 for 80x86 Copyright (C) Microsoft Corporation. All rights reserved.

cl : Command line warning D9024 : unrecognized source file type '06_012', object file assumed 06_012.cpp C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\xlocale(323) : warning C4530: C++ exception handler used, but unwind semantics are not enabled. Specify /EHsc C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\xutility(373) : error C2825: '_Iter': must be a class or namespace when followed by '::' 06_012.cpp(20) : see reference to class template instantiation 'std::iterator_traits<_Iter>' being compiled with [ _Iter=double ] C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\xutility(373) : error C2039: 'iterator_category' : is not a member of ' global namespace'' C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\xutility(373) : error C2146: syntax error : missing ';' b efore identifier 'iterator_category' C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\xutility(373) : error C2602: 'std::iterator_traits<_Iter> ::iterator_category' is not a member of a base class of 'std::iterator_traits<_Iter>' with [ _Iter=double ] C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\xutility(373) : see declaration of 'std::iterator _traits<_Iter>::iterator_category' with [ _Iter=double ] C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\xutility(373) : error C2868: 'std::iterator_traits<_Iter> ::iterator_category' : illegal syntax for using-declaration; expected qualified-name with [ _Iter=double ] C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\xutility(374) : error C2825: '_Iter': must be a class or namespace when followed by '::' C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\xutility(374) : error C2039: 'value_type' : is not a memb er of ' global namespace'' C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\xutility(374) : error C2146: syntax error : missing ';' b efore identifier 'value_type' C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\xutility(374) : error C2602: 'std::iterator_traits<_Iter> ::value_type' is not a member of a base class of 'std::iterator_traits<_Iter>' with [ _Iter=double ] C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\xutility(374) : see declaration of 'std::iterator _traits<_Iter>::value_type' with [ _Iter=double ] C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\xutility(374) : error C2868: 'std::iterator_traits<_Iter> ::value_type' : illegal syntax for using-declaration; expected qualified-name with [ _Iter=double ] C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\xutility(375) : error C2825: '_Iter': must be a class or namespace when followed by '::' C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\xutility(375) : error C2039: 'difference_type' : is not a member of ' global namespace'' C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\xutility(375) : error C2146: syntax error : missing ';' b efore identifier 'difference_type' C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\xutility(375) : error C2602: 'std::iterator_traits<_Iter> ::difference_type' is not a member of a base class of 'std::iterator_traits<_Iter>' with [ _Iter=double ] C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\xutility(375) : see declaration of 'std::iterator _traits<_Iter>::difference_type' with [ _Iter=double ] C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\xutility(375) : error C2868: 'std::iterator_traits<_Iter> ::difference_type' : illegal syntax for using-declaration; expected qualified-name with [ _Iter=double ] C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\xutility(377) : error C2825: '_Iter': must be a class or namespace when followed by '::' C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\xutility(377) : error C2039: 'pointer' : is not a member of ' global namespace'' C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\xutility(377) : error C2146: syntax error : missing ';' b efore identifier 'pointer' C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\xutility(377) : error C2602: 'std::iterator_traits<_Iter> ::pointer' is not a member of a base class of 'std::iterator_traits<_Iter>' with [ _Iter=double ] C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\xutility(377) : see declaration of 'std::iterator _traits<_Iter>::pointer' with [ _Iter=double ] C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\xutility(377) : error C2868: 'std::iterator_traits<_Iter> ::pointer' : illegal syntax for using-declaration; expected qualified-name with [ _Iter=double ] C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\xutility(378) : error C2825: '_Iter': must be a class or namespace when followed by '::' C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\xutility(378) : error C2039: 'reference' : is not a membe r of '`global namespace'' C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\xutility(378) : error C2146: syntax error : missing ';' b efore identifier 'reference' C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\xutility(378) : error C2602: 'std::iterator_traits<_Iter> ::reference' is not a member of a base class of 'std::iterator_traits<_Iter>' with [ _Iter=double ] C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\xutility(378) : see declaration of 'std::iterator _traits<_Iter>::reference' with [ _Iter=double ] C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\xutility(378) : error C2868: 'std::iterator_traits<_Iter> ::reference' : illegal syntax for using-declaration; expected qualified-name with [ _Iter=double ]

C:\Users\kifcaliph\Desktop\starting out with c++\Chapter6>*

+1

Покажите нам сообщение об ошибке, скопируйте и вставьте код _exact_ у Вас возникли проблемы с компиляцией, чтобы мы могли воспроизвести вашу проблему надежно, и на самом деле поставить некоторые усилия в _reading_ сообщения об ошибках, вы получаете так что, возможно, вы сможете решить свои проблемы. Добавление восклицательных знаков, чтобы подчеркнуть ваше бедствие, также немного раздражает. –

+0

Хотя вам может понадобиться немного сократить сообщение об ошибке или форматировать его лучше. как указано, это делает ваше сообщение, по-видимому, главным образом мусором. Два с половиной экрана плотных букв и символов немного. –

ответ

6

Я угадывание (так как вы не потрудились на самом деле показать нам ошибки в вопросе), что существует ошибка двусмысленности между std::distance и ::distance, которая вступает в игру из-за вашей директивы использования. Полностью квалифицируйте ::distance, чтобы заставить вашу функцию вызываться, или избавиться от директивы using, либо полностью квалифицировать все, либо добавить объявление использования для каждого из символов внутри пространства имен std, которое вы собираетесь использовать.

Кроме того, вы опечатали distanceValue как distancValue в последней строке main.

+0

Я не уверен, что это проблема, по крайней мере, в визуальной студии, когда вы объявляете какую-либо функцию или переменную за пределами пространства имен, она становится стандартной по умолчанию и не генерируется ошибка. – Ali1S232

+0

Это опечатка предполагает, что это не копирование и вставка фактического кода, и, следовательно, на самом деле не может быть репрезентативным для его кода. –

+0

@Gajet: Я проверил как код OP, так и мои предложенные исправления в VC++ 2010. – ildjarn

4

Вы видите неудачный побочный эффект using namespace std;. Существует функция, называемая std::distance; так как вы использовали using namespace std;, он имеет преимущество перед вашим собственным distance функцией.

Решение не должно использоваться using namespace std;, а вместо этого указывать std::cout, std::setprecision и т. Д. Индивидуально. Кроме того, можно импортировать конкретные идентификаторы из std:

using std::cout; 
using std::setprecision; 
using std::fixed; 
using std::showpoint; 
using std::cin; 
using std::endl; 

Или вы можете продолжать использовать using namespace std;, но явно запросить свой собственный distance с ::distance - это просит расстояние от пустого пространства имен конкретно (не рекомендуется, если что-то добавляется std это может снова сломаться).

Также distancValue является опечаткой.

0

Это будет двусмысленность между std::distance и вашим ::distance - либо полностью квалифицируйте вызов, либо не включайте в себя все пространство имен std.

0

Ошибка в том, что Вы писали:

cout << "The distance is " << distancValue << endl; 

вместо:

cout << "The distance is " << distanceValue << endl; 

Вы видите, есть немного «а» на расстоянии, что вы пропустили, это исправить, и он будет работать Что ж.

И будьте осторожны в следующий раз :)

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