错误:从'char *'到'char'的无效转换[-fpermissive]

时间:2015-12-28 05:53:29

标签: c++

当我尝试编译时,我得到上面显示的错误,我不知道如何解决这个问题。我对C ++很陌生,所以请随意摧毁一切,因为我将从建议中学习。

输入:

.............
.............
..XXX.....X..
..XXX.....X..
..XXX........
..XXX........
..XXXXXXX....
..XXXXXXX....
..XXXXXXX....
.............
.............

输出:

.............
.............
..OOO.....O..
..OOO.....O..
..OOO........
..OOO........
..OOOOOOO....
..OOOOOOO....
..OOOOOOO....
.............
.............

如果我改变它而不是

if (board[i][j] == older) {
   board[i][j] = newer; 

我愿意。

if (board[i][j] == "X") {
   board[i][j] = "0"; 

它有效

#include <fstream>
#include <iostream>
#include <cstdlib> 
#include <vector>

int main(int argc, char* argv[]) {

    std::ifstream in_str(argv[1]);
    //Check that the file was properly opened      
    if (!in_str.good()) {
        std::cout << "Can't open " << argv[1] << " to read.\n";
        return (1);
    }
    std::string value;
    std::vector<std::string> board;

    while (in_str >> value) {
        board.push_back(value);
        }


    if (argv[3] == std::string ("replace")) {
        std::string older(argv[4]);
        std::string newer(argv[5]);
        for (unsigned int i = 0; i < board.size(); i++) {
            for (unsigned int j = 0; j < board[0].size(); j++) {
                if (board[i][j] == older) {
                    board[i][j] = newer;
                }
            }
        } 

3 个答案:

答案 0 :(得分:1)

由于board定义为:

std::vector<std::string> board;

board[i][j]评估为char&

由于oldernewer被定义为:

    std::string older(argv[4]);
    std::string newer(argv[5]);

以下是错误的:

board[i][j] == older
board[i][j] = newer;

您无法将std::stringchar进行比较,也无法将std::string分配给char

以下也是错误的:

board[i][j] == "X"
board[i][j] = "O";

您无法将char const*/char*/char [2]char进行比较,也无法将此类对象分配给char

您可以使用:

board[i][j] == older
board[i][j] = newer;

如果oldernewer属于char类型。我建议将这些变量的声明更改为:

    char older = argv[4][0];
    char newer = argv[5][0];

答案 1 :(得分:0)

棋盘矩阵中的任何项目都是char。 和更旧和更新是字符串(char *) 在     if(board [i] [j] == old) 您尝试比较char *和char的代码 将旧的和更新的设置为char而不是字符串

答案 2 :(得分:0)

要解决此问题,您可以与older[0]newer[0]进行比较,因为它们会返回对char应该有效的参考值。

正如其他人所指出的,截至目前,您将字符串对象与单个字符串进行比较是有问题的。但是较旧的[0] /较新[0]将返回对char的引用。