【问题标题】:Error "Function was not declared in this scope", even though it is错误“未在此范围内声明函数”,即使它是
【发布时间】:2018-04-22 15:37:12
【问题描述】:

根据编译器,函数 listLength() 未在此范围内声明。但它是在 main() 函数之前声明的。
即使我看过其他人的问题,我也看不出这个功能有什么问题。

代码有什么问题?

/* ... */

int listLenght(node* head){
    node *temp = head;
    int length;
    while(temp->next != NULL){
        length++;
        temp = temp->next;
    }
    return length/2;
}


void createList(int length, node *head){
    node *temp = head;
    for(int i = 0; i < length; i++){
        temp->next = (node*) malloc(sizeof(node));
        temp->data = i;
        temp = temp->next;
        temp->next = NULL;
    }
}


...


int main(){
    node *head = (node*) malloc(sizeof(node));
    createList(5, head);
    int a = listLength(head);
}

【问题讨论】:

  • 你知道如何使用调试器吗?看看你的函数名!
  • @AbhishekKeshri 你能解释一下如何使用调试器来找到它。不是需要先成功构建吗...

标签: c error-handling


【解决方案1】:

listLength() 未定义。
listLenght() 已定义。

一开始相信编译器,或者试图证明它是错误的,很容易发现这种小错误。
IE。搜索“listLength”并查看它是否在您的代码中......除了编译器抱怨的调用之外,其他任何地方都没有。
或者(Martin James 的好输入),反过来,将编译器抱怨的“未定义符号”粘贴到“明显相同”定义的位置。 “令人惊讶的是,它多久能解决问题”(Martin 的引述,我完全同意)。如果它确实有帮助,那么会有一些难以看出(甚至是三次)的微小差异。

'1'(数字),
'l'(小写'L'),
'I'(大写'i')
在某些字体中可能非常相似。

【讨论】:

  • 一旦我查看了函数声明/定义三遍,并且看不出任何问题,我将一个复制/粘贴到另一个。令人惊讶的是,它多久能解决问题:)
  • @MartinJames 我认为这是一个自给自足的单独答案。请做一个。否则,我愿意在您(隐式)许可的情况下挑选那个很好的建议来整合到我的建议中。
  • 哦-随意!有了一个清晰的自记录函数名称和一些类似的参数,很容易犯一个愚蠢的错字,一旦我的大脑输入了错字,当我查看我写的内容时,它就看不到它,甚至多次,逐个令牌。很多次我都做了那个特别愚蠢的事,尤其是如果有点累:)
猜你喜欢
  • 1970-01-01
  • 2020-08-23
  • 2012-04-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-10
  • 2015-06-23
相关资源
最近更新 更多