【问题标题】:No matching constructor for initialization of "Type"“类型”的初始化没有匹配的构造函数
【发布时间】:2015-01-26 15:48:07
【问题描述】:

我正在使用 C++(使用 SFML2.2 库,Xcode 6.1.1)编写棋盘游戏。我创建了两个类:block 和 board。这个想法是在板内创建一个 4x4 的块向量。代码如下:

在block.h中

#ifndef __Game1024__block__
#define __Game1024__block__
#include <stdio.h>
#include <iostream> 
#endif /* defined(__Game1024__block__) */

using namespace std;

class block{
public:
    sf::RectangleShape rect;
    sf::Text text;
    block();
    block(const int X,const int Y,const double size, const double blockSize, const double charSize, const int value, const sf::Color fillColor, const sf::Color textColor);
};

在block.cpp中

#include <SFML/Audio.hpp>
#include <SFML/Graphics.hpp>
#include <string>
#include <sstream>
#include "block.h"

using namespace std;

block::block(){}

block::block(const int X,const int Y,const double size, const double blockSize, const double charSize, const int value, const sf::Color fillColor, const sf::Color textColor){

    double centerX = (X+0.5)*size;
    double centerY = (Y+0.5)*size;
    stringstream ss;
    ss << value;
    string sval = ss.str();

    rect.setSize(sf::Vector2f(blockSize,blockSize));
    rect.setOrigin(blockSize/2.0, blockSize/2.0);
    rect.setPosition(centerX, centerY);
    rect.setFillColor(fillColor);

    text.setStyle(sf::Text::Bold);
    text.setCharacterSize(charSize);
    text.setString(sval);
    text.setColor(textColor);
    text.setOrigin(text.getLocalBounds().width/2.0, text.getLocalBounds().height);
    text.setPosition(centerX, centerY);
 }

在board.h中

#ifndef __Game1024__board__
#define __Game1024__board__
#include <stdio.h>
#endif /* defined(__Game1024__board__) */
#include <vector>
#include "block.h"
using namespace std;

class board{
private:
    int winSizeX;
    int winSizeY;
    int margin;
    double charSize;
public:
    vector<vector<block>> matrix;
    board();
    board(int winSizeX_,int winSizeY_,int margin_, double charSize_);
    void draw();
};

在board.cpp中

#include "board.h"
//#include <SFML/Audio.hpp>
#include <SFML/Graphics.hpp>
#include "block.h"
using namespace std;

board::board(){}

board::board(int winSizeX_,int winSizeY_,int margin_, double charSize_){
    winSizeX = winSizeX_;
    winSizeY = winSizeY_;
    margin = margin_;
    charSize = charSize_;
    matrix = vector<vector<block>>(4,vector<block>(4));

    double size = winSizeX/4.0; // = 256
    double blockSize = size - 2*margin;
    const sf::Color fillColor = sf::Color::Red;
    const sf::Color textColor = sf::Color::White;

    sf::Font font;
    if(!font.loadFromFile("./sansation.ttf")){
        exit(EXIT_FAILURE);
    };
    for (int i = 0; i < 4; ++i){
        for (int j = 0; j < 4; ++j){
            int value = 4*j + i + 1;
            matrix[i][j] = block(i,j,size,blockSize, charSize,value,fillColor,textColor);
            matrix[i][j].text.setFont(font);
            matrix[i][j].text.setOrigin(matrix[i][j].text.getLocalBounds().width/2.0,b[i][j].text.getLocalBounds().height);
        }
    }
}

错误来自board.cpp

matrix[i][j] = block(i,j,size,blockSize, charSize,value,fillColor,textColor);

一个奇怪的事情是当我输入 matrix[i][j] = block 时,我的 IDE (Xcode) 的自动填充将生成

matrix[i][j] = block(<#const int X#>, <#const int Y#>, <#const double size#>, <#const double blockSize#>, <#const double charSize#>, <#const int value#>, <#const int fillColor#>, <#const int textColor#>)

构造函数 block 的最后两个参数从 sf::Color 类型更改为 int

如果我在 ma​​in.cpp 文件中创建一个 4x4 的块向量并调用 block 的构造函数,则没有错误...

有什么帮助吗? 提前致谢!

[更新] 我附上了错误信息的截图

【问题讨论】:

  • 一般建议:切勿将using namespace std; 放在标题中。
  • 或任何其他using namespace
  • 您应该创建一个复制构造函数。 board(const board &amp;) 甚至是移动构造函数,因为在您的情况下,您有一个右值分配。
  • 可能不那么相关,但#endif 应该出现在文件末尾而不是在第一个包含之后......或者只使用#pragma once
  • 并注意“block.h”应该包含定义Color的SFML标头,因为它使用它。

标签: c++ constructor sfml


【解决方案1】:

感谢@molbdnilo

我犯了一个愚蠢的错误,我忘记在“block.h”中包含 SFML 标头

#include <SFML/Graphics.hpp>

现在问题解决了!感谢所有建议。我是 C++ 项目的新手,请随时说出我在代码中的所有不良做法。很有帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-14
    • 1970-01-01
    • 2020-11-17
    • 2017-06-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多