错误 C2512 但我有可用的默认构造函数

Posted

技术标签:

【中文标题】错误 C2512 但我有可用的默认构造函数【英文标题】:error C2512 but i have default constructor available 【发布时间】:2013-07-03 06:19:43 【问题描述】:

我的代码有错误(错误 C2512: 'Node' : 没有合适的默认构造函数可用) 但我有默认构造函数为什么??? 我在代码中注释的错误位置请帮助我

节点.h

#pragma once
#include "stat.h"
#include "Automata.h"
#include <cstdlib>

class Node

    friend class Automata;
    friend class stat_a;
    friend stat_a* makeauto(char *str);
    friend int main();
private:
    stat_a* mess;
    char data;//harfi ke ba in masir estefadeh mishe :)
    Node *next;//node badi dar araye node ha class stat_a :)
public:
    Node()
    
        mess = NULL;
        next = NULL;
    ;
;

stat.h

#pragma once
#include "Node.h" 
#include <iostream>

using namespace std;
class stat_a

    friend class Automata;
    friend class Node;
    friend int main();
private:
    bool is_final_stat_a;        //aya final stat_a hast ???
    int  stat_a_num;              //shomareh halat 0,1,2,...
    Node *last;                  //akharin node dar araye node haye neshan dahande masir
    Node *first;                //Avalin node dar araye node haye neshan dahande masir
public:
    void add(char d,stat_a * a)//ezafeh kardan masiri ke ba estefadeh
                           //az harf (char d ) be halat (stat_a a) miravad
        if(first == NULL)
        
            first = new Node;//error is here
            first->data = d;
            first->mess = a;
            last=first;
        
        else
        
            last->next = new Node ;//erorr is here
            last=last->next;
            last->data=d;
            last->next=NULL;
            last->mess=a;
        
    ;

    /***********************************************************************/

    void print()
    
        cout<<stat_a_num<<"========> is final_stat_a : "<<is_final_stat_a<<endl;
        Node *a;

        a=first;
        while(a != NULL)
        
            cout<<"========> By '"<<a->data<<"' go to stat "<<a->mess->stat_a_num<<endl;
            a=a->next;
        
    ;

    stat_a()
    
        last=NULL;
        first=NULL;
        is_final_stat_a=false;
    ;

    ~stat_a(void);
;

我有默认构造函数,为什么会出错

【问题讨论】:

下次您在 *** 上寻求帮助时,请删除您当地语言的 cmets,这对于不熟悉您的语言的人来说只是一种噪音,会分散实际问题的注意力。 你有一个循环包含依赖。那是行不通的。 不要像你一样过度交朋友,只在真正需要的时候保留它(在 99.99% 的情况下永远不会)。 【参考方案1】:

这是一个循环依赖的经典例子。头文件Node.h依赖于头文件stat.h又依赖于Node.h等等。

由于你只在Node中声明了一个stat_h类型的指针变量,你不需要为此包含头文件,声明类stat_a就足够了:

#pragma once
#include "Automata.h"
#include <cstdlib>

class stat_a;  // Declare the class, so the compiler know there's a class by this name

class Node

    // ...

private:
    stat_a* mess;  // Works because you're only declaring a pointer

    // ...

public:
    // ...
;

然后在 stat.h 标头中包含 Node.h 时不再存在循环依赖。

【讨论】:

@Rezaagha 更新了我的答案 @Rezaagha 如果您按照我的回答修改了Node.h,并保持stat.h 不变,那么错误应该已经消失了。 @Rezaagha 顺便说一句,我希望Automata.h 不包含stat.h 或者你仍然有循环依赖。【参考方案2】:

替换

Node();

    mess = NULL;
    next = NULL;

Node()

    mess = NULL;
    next = NULL;
;

【讨论】:

以上是关于错误 C2512 但我有可用的默认构造函数的主要内容,如果未能解决你的问题,请参考以下文章

错误 C2512:没有适当的默认构造函数可用 - 为啥在构造函数中初始化属性?

错误 C2512:'Building':没有合适的默认构造函数可用

错误 C2512 没有合适的默认构造函数,即使我有一个?

error C2512: 没有合适的默认构造函数可用

使用模板时缺少默认构造函数

复制构造函数没有合适的默认构造函数