构造函数在定义错误时使用自身

时间:2014-12-09 04:04:57

标签: c++ constructor

错误1错误C2460:' Square :: string' :使用' Square',正在定义

大家好,我在尝试实现4平方密码时遇到以下错误。我在Square标题和.cpp文件中有两个构造函数。其中一个不带参数而另一个带字符串。带字符串的那个抛出错误。

square.h

#include <string>

#ifndef SQUARE_H
#define SQUARE_H
class Square
{
public:
    Square();
    Square(string);
    ~Square();
    char mat[5][5];
    bool used[25];
    char getChar(int, int);
    int* getPos(char);

};

#endif

以下是.cpp文件中的布局。

Square::Square(string s)
{
//Code in here can show on request!
}

我认为字符串与它有关,但我不确定。

3 个答案:

答案 0 :(得分:1)

而不是

Square( string );

你需要

Square( std::string );

未显示的代码中可能存在其他错误。


不是错误,但通常通过引用传递std::string,以避免不必要的复制。


另外,提示:使用现代编译器,您可以使用#pragma once而不是包含警戒。请记住,它是一个普遍支持的事实上的标准,而不是官方标准的一部分。我发现它更清洁,不知何故,它减少了提出独特,独特的包含警卫符号的需要。

答案 1 :(得分:0)

还不足以真正了解这里发生了什么。你所拥有的一切看起来都很好。

也许你需要命名空间?

Square(std::string);

答案 2 :(得分:0)

请参阅(此处为:Error : Class A uses Class B, which is being defined)以及here

字符串是问题所在。它来自std名称空间,因此每次出现字符串前缀为&#39; std ::&#39;,例如为你的标题:

#include <string>

#ifndef SQUARE_H
#define SQUARE_H
class Square
{
public:
    Square();
    Square(std::string);
    ~Square();
    char mat[5][5];
    bool used[25];
    char getChar(int, int);
    int* getPos(char);

};