调用带指针的函数时出现‘expected ')' before '&' token’错误求助
expected ')' before '&' token 这个报错! 嘿,这个错误我之前也碰到过——本质是编译器在解析你调用calcula_pq的代码时,搞不清参数列表到底在哪结束,突然看到&符号就懵了,所以抛出这个提示。结合你给的代码片段,我整理了几个最可能的原因和修复办法:
1. 先检查调用代码的参数完整性和语法
从你贴的main代码看,double p1, p2, q1, q2, xi, y...这里明显没写完,大概率是你在调用calcula_pq的时候,前面的参数(比如xi, yi, div这些)要么没传全,要么某个参数之间漏掉了逗号,导致编译器误以为参数列表到某个地方就结束了,后面的&p1就成了多余的内容。
举个反例,要是你写成这样:
calcula_pq(xi, yi div, xk, yk, dkv, x2, y2, d2v, x3, y3, d3v, &p1, &p2, &q1, &q2);
yi和div之间少了个逗号,编译器直接就会混乱,觉得yi之后参数就结束了,自然会报错。
修复建议:对着calcula_pq的函数原型一条一条核对调用参数,确保数量、顺序完全对得上,每个参数之间都有逗号,没少也没多。
2. 确认函数原型没语法问题
再仔细看你写的函数原型:
void calcula_pq ( double xi, double yi, double div, double xk, double yk, double dkv, double x2, double y2, double d2v, double x3, double y3, double d3v, double *p1, double *p2, double *q1, double *q2);
要注意检查:
- 原型末尾的分号是否存在(你的代码里是对的)
- 每个参数的类型和变量名之间的空格是否正常(这里没问题)
- 有没有拼写错误,比如某个参数名写错导致编译器看不懂参数边界
要是原型本身有语法错误,编译器根本没法正确识别函数该接多少参数,调用时肯定会出错。
3. 检查main里的变量声明是否完整
你在main里只写了double p1, p2, q1, q2, xi, y...,明显yi, div, xk这些要传给calcula_pq的变量都没声明全啊!要是某个变量没声明,编译器在解析调用的时候很容易搞混参数列表,进而报错。
修复建议:把所有需要用到的变量都完整声明出来,比如:
double p1, p2, q1, q2, xi, yi, div, xk, yk, dkv, x2, y2, d2v, x3, y3, d3v;
最好还给它们个初始值,避免后续出现未定义行为。
4. 写个最小测试代码排查问题
要是上面的方法都没用,建议你写个能完整编译的最小示例代码,比如:
#include <stdio.h> // 复制你的函数原型 void calcula_pq ( double xi, double yi, double div, double xk, double yk, double dkv, double x2, double y2, double d2v, double x3, double y3, double d3v, double *p1, double *p2, double *q1, double *q2); int main () { // 声明所有变量并初始化 double p1 = 0.0, p2 = 0.0, q1 = 0.0, q2 = 0.0; double xi = 1.0, yi = 1.0, div = 1.0; double xk = 1.0, yk = 1.0, dkv = 1.0; double x2 = 1.0, y2 = 1.0, d2v = 1.0; double x3 = 1.0, y3 = 1.0, d3v = 1.0; // 完整调用函数 calcula_pq(xi, yi, div, xk, yk, dkv, x2, y2, d2v, x3, y3, d3v, &p1, &p2, &q1, &q2); return 0; } // 暂时写个空实现,避免链接错误 void calcula_pq ( double xi, double yi, double div, double xk, double yk, double dkv, double x2, double y2, double d2v, double x3, double y3, double d3v, double *p1, double *p2, double *q1, double *q2) { // 这里可以后续补逻辑 }
要是这个代码能正常编译,说明你的问题出在原代码的细节上(比如某个参数漏了逗号、变量没声明);要是还是报错,那可能是编译器的特殊设置或者其他隐藏的语法问题。
内容的提问来源于stack exchange,提问作者Unicorn Lord

