C++ 类(c+;+;类)不存在默认构造函数 #包括 #包括 使用名称空间std; #ifndef TicTac_H #定义TicTac_H TicTac类 { 公众: TicTac(int,int); void setpos(int); void getpos(int); void setpos2(int); void getpos2(int); bool-takepos(); void setar(int&,int&); void setarr(); 全部作废(int,int); 作废打印(); int测试(); 私人: int-p1; int p2; 字符串tic[3][3]; 字符串x; o串; int t1; int t2; 布尔ok; }; #恩迪夫
**编译器显示了以下消息: 类“TicTac”不存在默认构造函数 “TicTac”:没有合适的默认构造函数可用C++ 类(c+;+;类)不存在默认构造函数 #包括 #包括 使用名称空间std; #ifndef TicTac_H #定义TicTac_H TicTac类 { 公众: TicTac(int,int); void setpos(int); void getpos(int); void setpos2(int); void getpos2(int); bool-takepos(); void setar(int&,int&); void setarr(); 全部作废(int,int); 作废打印(); int测试(); 私人: int-p1; int p2; 字符串tic[3][3]; 字符串x; o串; int t1; int t2; 布尔ok; }; #恩迪夫,c++,C++,**编译器显示了以下消息: 类“TicTac”不存在默认构造函数 “TicTac”:没有合适的默认构造函数可用 有人能帮我解决这个问题吗**错误肯定不在该代码中,而是在包含该头并试图创建类型为TicTac的对象的代码中,而不提供构造函数采用的两个参数(两个int)。除此之外,include保护应该覆盖所有文件(包括#include),并且在头中不应该有using指令(使用名称空间X)
有人能帮我解决这个问题吗**错误肯定不在该代码中,而是在包含该头并试图创建类型为
TicTac
的对象的代码中,而不提供构造函数采用的两个参数(两个int
)。除此之外,include保护应该覆盖所有文件(包括#include
),并且在头中不应该有using指令(使用名称空间X
)如果你不为C++类创建构造函数,编译器会为你创建一个默认的,不接受任何参数的,但是如果创建一个构造函数,然后尝试使用“默认”,你就会得到你现在得到的错误。创建TicTac对象的代码在哪里。您可能在容器或某处使用TicTac,这需要创建没有构造函数参数的TicTac对象。正如船长所说,你需要一个TicTac()。只需内联放置一个就很容易了:TicTac(){}
re“你不应该在头中有一个using指令(使用名称空间X)”,ITYM“在头中的全局名称空间”。@Cheers:我个人认为你不应该在任何地方使用它们。除此之外,我在这里没有看到全局名称空间的任何特殊之处。它在全局命名空间中更糟糕,在任何其他ns中仍然不好。有例外,但这不是其中之一。我来自一个截然相反的观点,关于什么是理想的,很少有名字是合格的。我认为,与C风格的前缀或后缀相比,名称空间的主要特点是可能大部分使用非限定名称。无论如何,我想在头中的名称空间中使用名称空间X的实用性(或危险性)很难达成一致。因此,建议会有所不同。;-)@阿尔夫:嗯,我不是特别喜欢他们,但我不经常(嗯,也许我会)这样说教。另一方面,在标题中,无论用户的偏好如何,您都在强制所有用户使用您的选项。是否要在实现文件中使用它?在函数定义内部(无论是否在标头中使用inline
)。我对它、您的代码、您的选择都很满意。在仅标头的模块中(非常适合避免安装问题),标头是实现代码。;-)显然截然相反的理想也存在。我希望所有内容都在标题中,每个模块都有一个文件,尽管这不是真正可以实现的。
#include<iostream>
#include<string>
using namespace std;
#ifndef TicTac_H
#define TicTac_H
class TicTac
{
public:
TicTac(int ,int);
void setpos(int);
void getpos(int);
void setpos2(int);
void getpos2(int);
bool takepos();
void setar(int&, int&);
void setarr();
void all(int,int);
void print();
int test();
private:
int p1;
int p2;
string tic[3][3] ;
string x;
string o;
int t1;
int t2;
bool ok;
};
#endif