[英]Using of vector in C++
我遇到以下代碼時出現問題,似乎無法弄清楚出了什么問題
#include <iostream>
#include <cmath>
#include <vector>
using namespace std;
double distance(int a, int b)
{
return fabs(a-b);
}
int main()
{
vector<int> age;
age.push_back(10);
age.push_back(15);
cout<<distance(age[0],age[1]);
return 0;
}
錯誤在於調用函數距離。
/usr/include/c++/4.6/bits/stl_iterator_base_types.h: In instantiation of ‘std::iterator_traits<int>’:
test.cpp:18:30: instantiated from here
/usr/include/c++/4.6/bits/stl_iterator_base_types.h:166:53: error: ‘int’ is not a class, struct, or union type
/usr/include/c++/4.6/bits/stl_iterator_base_types.h:167:53: error: ‘int’ is not a class, struct, or union type
/usr/include/c++/4.6/bits/stl_iterator_base_types.h:168:53: error: ‘int’ is not a class, struct, or union type
/usr/include/c++/4.6/bits/stl_iterator_base_types.h:169:53: error: ‘int’ is not a class, struct, or union type
/usr/include/c++/4.6/bits/stl_iterator_base_types.h:170:53: error: ‘int’ is not a class, struct, or union type
您正在嘗試覆蓋std :: distance函數,嘗試刪除“ using namespace std
”並使用std::
限定cout
和endl
std::
#include <iostream>
#include <cmath>
#include <vector>
double distance(int a, int b)
{
return fabs(a-b);
}
int main()
{
std::vector<int> age;
age.push_back(10);
age.push_back(15);
std::cout<< distance(age[0],age[1]);
return 0;
}
std::distance
用於計算指定范圍內容器中元素的數量。 你可以在這里找到更多相關信息。
或者,如果要引入std::
namespace,可以重命名距離函數:
#include <iostream>
#include <cmath>
#include <vector>
using namespace std;
double mydistance(int a, int b)
{
return fabs(a-b);
}
int main()
{
vector<int> age;
age.push_back(10);
age.push_back(15);
cout<<mydistance(age[0],age[1]);
return 0;
}
這將使您的代碼工作,但不建議在定義之前使用“using namespace”聲明。 編寫代碼時,應避免使用第二個選項,此處僅顯示代碼示例的替代選項。
怎么樣
cout<< ::distance(age[0],age[1]);
(其他答案已經建議刪除using
指令)。
當您創建自己的名為distance
的函數時,請不要using namespace std
,因為您對distance
的調用正在尋找std::distance
而不是您的distance
函數。
你也可以這樣做:
namespace foo
{
double distance(int a, int b)
{
return fabs(a-b);
}
}
int main()
{
foo::distance(x,y); //now you're calling your own distance function.
}
或者,您可以使用
using foo::distance; // OR:
using namespace foo;
(distance)(x,y); // the (parens) prevent ADL
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.