簡體   English   中英

在C ++中使用vector

[英]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::限定coutendl 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM