二进制表达式的操作数无效("std::__1::basic_ostream<char>"和"ostream"(又名"basic_ostream")) std::cout<<&l

invalid operands to binary expression ('std::__1::basic_ostream<char>' and 'ostream' (aka 'basic_ostream<char>')) std::cout<<check<<std::cout;

本文关键字:lt ostream basic std 又名 表达式 gt cout 二进制 无效 操作数      更新时间:2023-10-16

我在试着回答一个标准的面试问题。我有一个向量,其中每个元素本身都是一个整数向量。V[0]是雇员0,V[0]中的int向量是向他汇报的雇员的数量,比如2,3,5。现在,如果v[2]有7,那么7间接地向雇员0到雇员2报告。问题是找到一个函数,它接受两个整数a和b以及依赖向量,并判断a是否直接或间接地向b报告。

BFS逻辑

bool dependencyList(int a, int b, std::vector<std::vector<int>>& v){
    std::queue<int> Q;
    std::vector<int> D;
    std::unordered_map<int, int> M;
    for(auto it = v[b].begin(); it!= v[b].end(); it++){
        Q.push(*it);
        D.push_back(*it);
        M[*it] = 1;
    }
    while(!Q.empty()){
        int num = Q.front();
        for(auto it = v[num].begin(); it != v[num].end(); it++){
            if(M.find(*it) == M.end()){
                D.push_back(*it);
                M[*it] =1;
                Q.push(*it);
            }
        }
        Q.pop();
    }
    for(auto it= D.begin(); it!= D.end(); it++){
        if(*it == a) return true;
    }
    return false;
}

下面是驱动程序代码

int main() {
    std::vector<int> v0;
    v0.push_back(2);
    v0.push_back(3);
    v0.push_back(7);
    std::vector<int> v1;
    v1.push_back(4);
    v1.push_back(9);
    v1.push_back(11);
    std::vector<int> v2;
    v2.push_back(3);
    v2.push_back(5);
    std::vector<int> v3;
    v3.push_back(8);
    v3.push_back(6);
    std::vector<std::vector<int>> v;
    v.push_back(v0);
    v.push_back(v1);
    v.push_back(v2);
    v.push_back(v3);
    bool check = dependencyList(6,0,v);
    std::cout<<check<<std::cout;
    return 0;
}

这是我得到的错误

invalid operands to binary expression ('std::__1::basic_ostream<char>' and 'ostream' (aka 'basic_ostream<char>'))
    std::cout<<check<<std::cout;
    ~~~~~~~~~~~~~~~~^ ~~~~~~~~~

尝试从表达式std::cout<<check<<std::cout;中删除std::cout;。如果您使用GNU g++编译器编译此代码,它可以编译得很好。但是如果你用visual c++编译器(c++11,这是我测试用的)来编译它,它会给出一个错误。

使用g++编译器显示对象std::cout的地址。因此,如果您想显示地址,请尝试std::cout<<check<<&std::cout;