Xcode系统清除,"表达结果未使用"使用C ++时出错

时间:2014-08-11 11:40:58

标签: c++ xcode macos system

在尝试使用Xcode编写Tic Tac Toe游戏来练习C ++时,我遇到了各种各样的问题,我已经解决了这个问题,但是我仍然无法理解为什么会出现以下错误以及如何正确修复它们/避免它们。

问题1:

我已经链接了curses库,但我仍然收到此错误:从字符串文字转换为'char *'已弃用

#include <unistd.h>
#include <term.h>
void ClearScreen()
{
if (!cur_term)
{
    int result;
    setupterm( NULL, STDOUT_FILENO, &result );
    if (result <= 0) return;
}
putp( tigetstr( "clear" ) );
}  

问题2: 我一直收到未使用的实体问题表达式结果未使用)。
(gridBox是char类型的二维数组,player也是char类型,两个全局变量。)

    if (gridBox[0,0] == gridBox[1,0] && gridBox[1,0] == gridBox[2,0]) {

    if (player == 'X') {
        return 'X';
    }
    if (player == 'O') {
        return 'O';
    }
}

问题3: 当我尝试将最后一个问题中的if语句更改为...时

    if (gridBox[0,0] == 'X' && gridBox[1,0] == 'X' && gridBox[2,0] == 'X') {
    return 'X';
}

我收到此错误:指针和整数之间的比较('char *'和'int')

这让我完全疯了,请帮忙。

提前谢谢大家!

1 个答案:

答案 0 :(得分:0)

  1. 就是这样:从字符串文字(例如"clear")隐式转换为指向非常量字符char*的指针,过去由于历史原因而被允许但已被允许因为它非常不安全而被弃用 当与C库或旧代码连接时,这可能会导致一些问题,但通常很容易解决。

    将其替换为非const数组:

    char clear[] = "clear"; putp(tigetstr(clear));

  2. 是由索引错误的方式引起的; 2-D数组是一个数组数组,它​​的索引如下:

    gridBox[0][0]

    如果要按顺序评估两个表达式并丢弃第一个表达式的结果,则在某些上下文中使用逗号运算符 - a, b返回b的值,因此gridBox[0,0]相当于gridBox[0]。 它在实践中非常罕见 - 编辑器开始发出警告非常罕见,因为它几乎不是你想要的。

  3. 由于gridBoxchar的数组数组,因为第2点,gridBox[0,0]相当于gridBox[0]gridBox[0]是一个char数组 您无法将数组与==进行比较。相反,它们被隐式转换为指向数组的第一个元素的指针,然后将其用于比较。 因此,左侧是char*,右侧被提升为int以进行比较,而这两者无法进行比较。
    如果您修复索引问题,此问题将同时消失。