为什么这个未解决的重载函数类型错误?

时间:2016-10-02 08:43:23

标签: multithreading c++11

编译时我收到错误

category.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
    @Override
    public void onItemSelected(AdapterView<?> adapterView, View view, int position, long l) {
        // get selected item using position argument
        Item selectedItem = list.get(position);
        // your code
    }

    @Override
    public void onNothingSelected(AdapterView<?> adapterView) {

    }
});

g ++ div.cpp -std = c ++ 11 -pthread

#include<iostream>
#include<thread>
#include<vector>
using namespace std;

int a=100;

void div()
{
        if(a!=0) int div1 = 100/a;
}

void assign()
{
        a=0;
}

int main()
{
        vector<thread> Threads;

        for(int i=0;i<100;i++)
        {
                Threads.push_back(thread(div));
                Threads.push_back(thread(assign));
        }
}

我无法理解这里的问题是什么?

1 个答案:

答案 0 :(得分:2)

div中有一个名为<cstdlib>的标准函数。 div是一个C函数,因此允许将其放在全局命名空间中。编译器不知道要使用哪个div

您通过程序中使用的系统头之一间接包含<cstdlib>,因为C ++标头可能包含其他C ++标头。

您不应该尝试定义与C标准库冲突的名称。重命名div函数,或使用自己的命名空间。

此外,建议使用emplace_back代替push_back

Threads.emplace_back(div);

这会直接创建线程并避免创建临时并从中移动。

此外,不建议使用using namespace std;,因为这会将整个C ++标准库带到作用域,这可能会使您的程序遇到类似这样的冲突。