尽管我很了解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]
的成员的指针
为什么会这样?
答案 0 :(得分:4)
要使用C ++调用函数,您需要使用()
符号。
int l = list.size();
答案 1 :(得分:2)
该错误有点令人困惑。
问题在于std::vector::size
实际上是一个函数,而不是数据成员。
因此,要调用它,需要括号:
int l = list.size();
我会承认的。编译器错误不是太解释。它源于以下事实:如果在不带括号的情况下使用函数,则可以将其视为指针。这对于诸如存储回调之类的东西很有用。但这不是您要在此处执行的操作,因此您只想调用该函数。