函数参数中的向量出现“非标准语法”错误

时间:2019-10-17 23:22:49

标签: c++

尽管我很了解Java,但我对C ++还是陌生的,并且我试图创建一个查找素数并打印它们的程序,但没有通过对小于n的所有整数执行n%m来测试n是否为素数并测试它是否为0,它仅测试已经找到的质数的模数是否为0,因为它给出的结果相同,但效率可能更高(尽管我可能对效率完全错了,但我想这样做更多作为练习)。我面临的问题是,它引发了“非标准语法;使用'&'创建指向成员的指针”错误,我不确定这是什么意思。我只知道指针的基础知识,所以idk如何解决这个问题以及确切的问题是什么。

我已经尝试过在向量前的各个位置扔出一堆“&”符号,以期使它偶然起作用,但我不知道。这是我现在拥有的代码:

using namespace std;
bool isPrime(vector<int> list, int number);

int main()
{
    int n;
    cin >> n;
    vector<int> primes;
    primes.push_back(2);

    for (int m = 3; m <= n; m=m+2)
    {
        if (isPrime(primes, m))
        {
            primes.push_back(m);
        }
    }

    for (int m = 0; m < n; m++)
    {
        cout << primes[m];
    }
}

bool isPrime(vector<int> list, int number)
{   
    int l = list.size;
    bool isPrime = true;

    for (int n = 0; n < l; n++)
    {
        if (number % list[n] == 0) 
        {
            isPrime = false;
        }
    }

    return isPrime;
}

这是错误消息:

  

非标准语法;使用“&”创建指向具有[_Ty = int]

的成员的指针

为什么会这样?

2 个答案:

答案 0 :(得分:4)

要使用C ++调用函数,您需要使用()符号。

int l = list.size();

答案 1 :(得分:2)

该错误有点令人困惑。

问题在于std::vector::size实际上是一个函数,而不是数据成员。

因此,要调用它,需要括号:

int l = list.size();

我会承认的。编译器错误不是太解释。它源于以下事实:如果在不带括号的情况下使用函数,则可以将其视为指针。这对于诸如存储回调之类的东西很有用。但这不是您要在此处执行的操作,因此您只想调用该函数。