我为什么会收到错误"对struct_tag的引用含糊不清"使用命名空间std?

时间:2016-03-19 10:12:46

标签: c++ namespaces

我正在尝试编写一个返回类型为 struct variable的函数。如果我使用using namespace std;我收到错误但是如果改为使用std::,程序运行正常。

错误的代码:

#include<iostream>
using namespace std;

struct distance
{
    int feet;
    int inches;
};
distance foo(distance, distance);
int main()
{
    distance d1, d2;
    cout << "Input feet of d1: ";     cin >> d1.feet;
    cout << "\nInput inches of d1: "; cin >> d1.inches;
    cout << "\nInput feet of d2: ";   cin >> d2.feet;
    cout << "\nInput inches of d2: "; cin >> d2.inches;
    distance large = foo(d1, d2);
    cout << "The larger distance is: " << large.feet << "\'-" << large.inches << "\"";
}
distance foo(distance d1, distance d2)
{
    float temp1 = d1.feet + d1.inches/12;
    float temp2 = d2.feet + d2.inches/12;
    if(temp1>temp2) return d1;
    else return d2;
}

错误:对distance的引用不明确。

没有命名空间的工作代码std:

#include<iostream>

struct distance
{
    int feet;
    int inches;
};
distance foo(distance, distance);
int main()
{
    distance d1, d2;
    std::cout << "Input feet of d1: "; std::cin >> d1.feet;
    std::cout << "\nInput inches of d1: "; std::cin >> d1.inches;
    std::cout << "\nInput feet of d2: "; std::cin >> d2.feet;
    std::cout << "\nInput inches of d2: "; std::cin >> d2.inches;
    distance large = foo(d1, d2);
    std::cout << "The larger distance is: " << large.feet << "\'-" << large.inches << "\"";
}
distance foo(distance d1, distance d2)
{
    float temp1 = d1.feet + d1.inches/12;
    float temp2 = d2.feet + d2.inches/12;
    if(temp1>temp2) return d1;
    else return d2;
}

据我所知,命名空间std有cout, cin等对象。但它与结构有什么关系?为什么using namespace std在直接使用std::顺利运行程序时会出错?

2 个答案:

答案 0 :(得分:1)

正如消息所述,名称$http({ method: 'GET', url: uri, headers: { 'Accept': 'application/x-zip-compressed' }, withCredentials: true }). success(function(data, status, headers) { if (status == 200 || status == 201) { notify('Success', 'Node exported.'); } }). error(function(data, status) { if (status == 401) { notify('Forbidden', 'Authentication required to edit the resource.'); } else if (status == 403) { notify('Forbidden', 'You are not allowed to edit the resource.'); } else { notify('Failed', status + " " + data); } }); std::distance与您定义的结构之间是不明确的。

你可以写

distance

而不是using std::cin; using std::cout; // more using for identifiers from namespace std to use

答案 1 :(得分:1)

你不应该完全使用using namespace std;,因为这可能会发生(甚至是工作)。

在您的情况下,编译器不知道您指的是哪个distance:它可以是您自己的,也可以是std::distance

如果您想在每次写std::cout时都避免写using std:: cout。 这将告诉编译器在使用cout时要查看的位置。