转换的警告.类错误

Conversion warning. and Class error

本文关键字:错误 警告 转换      更新时间:2023-10-16

我正在学习c++,在我现在正在做的作业中,我得到了一堆警告,我怀疑它们也导致了我得到的两个错误。问题是,显示警告的行是他给我们的行(其中之一),所以我认为代码一定是正确的。这使我相信在我的类声明或构造函数中存在问题。有人能发现什么问题吗?

警告(对于fillSystemCommandList函数的每一行)是不支持从字符串文字到'char *'的转换

,错误为架构x86_64的未定义符号:"COMMAND::COMMAND(char*, int)",引用自:在system_utilities.o中填充systemcommandlist ()没有找到架构x86_64的Ld:符号clang: error: link command failed with exit code 1(使用-v查看调用)

你可以跳过ParseCommandLine函数,我认为它很好。我只是包含它,以便我可以拥有整个文件(这不是我的主要btw)。

其他笔记:- systemCommands数组应该是长度为NUMBER_OF_COMMANDS的命令指针(我想我做对了)

- fillSystemCommandList函数应该用结构体填充systemCommands数组,这些结构体包含指向命令字符串的指针和相应的定义常量。

-I知道这段代码几乎全是C语言,这也是因为我选的是c++入门类。

#include "system_utilities.h"
#include "definitions.h"
using namespace std;

int getCommandNumber(char *s);
class COMMAND {
    char* pointertochar;
    int* pointertoint;

public:
    COMMAND(char*, int);
    int amIThisCommand(char*);
};
int COMMAND::amIThisCommand(char* command){
    return 0;
}
COMMAND* systemCommands[NUMBER_OF_COMMANDS];

int parseCommandLine(char cline[], char *tklist[]){
    int i;
    int length; //length of line
    int count = 0; //counts number of tokens
    int toklength = 0; //counts the length of each token
    length = strlen(cline);
    for (i=0; i < length; i++) {   //go to first character of each token
        if (((cline[i] != ' ' && cline[i-1]==' ') || i == 0)&& cline[i]!= '"') {

            while ((cline[i]!=' ')&& (cline[i] != '') && (cline[i] != 'r')){
                toklength++;
                i++;
            }
          //---------------
        tklist[count] = (char *) malloc( toklength +1);
        memcpy(tklist[count], &cline[i-toklength], toklength);
        tklist[count][toklength]='';
            //cout << "n" << tklist[count] << "n";
            //cout << "n" << i << "n";
            //cout << "n" << toklength << "n";
        //--------------
            count ++;
            toklength = 0;
        }
        if (cline[i] == '"') {
            do {
                toklength++;
                i++;
                /*if (cline[i] == ' ') {
                    toklength--;
                }*/
            } while (cline[i]!='"');
            //--------------
            tklist[count] = (char *) malloc( toklength +1);
            memcpy(tklist[count], &cline[i-toklength+1], toklength-1);
            tklist[count][toklength]='';
            //cout << "n" << tklist[count] << "n";
            //cout << "n" << i << "n";
            //cout << "n" << toklength << "n";
            //--------------
            count ++;
            toklength = 0;
        }
    }
    return count;

}
int getCommandNumber(char *s) {
    /*switch (*s) {
       // case "halt":
            return HALT;
            break;
        default:
            break;
    }*/
    return 0;
}
void fillSystemCommandList() {
    systemCommands[0] = new COMMAND("halt", HALT);
    systemCommands[1] = new COMMAND("status", STATUS);
    systemCommands[2] = new COMMAND("time_click", TIME_CLICK);
    systemCommands[3] = new COMMAND("new_sensor", NEW_SENSOR);
    systemCommands[4] = new COMMAND("new_sensor_node", NEW_SENSOR_NODE);
    systemCommands[5] = new COMMAND("new_network", NEW_NETWORK);
    systemCommands[6] = new COMMAND("add_sensor_to_node", ADD_SENSOR_TO_NODE);
    systemCommands[7] = new COMMAND("add_node_to_network", ADD_NODE_TO_NETWORK);
    systemCommands[8] = new COMMAND("sensor_command", SENSOR_COMMAND);
}

再次感谢你能给予的任何帮助!

systemCommandsCOMMAND对象的一个类。COMMAND类中有char*类型的成员,

中的"halt"
   systemCommands[0] = new COMMAND("halt", HALT);

const char*的,因此您得到了警告消息。您没有定义COMMAND类的构造函数。

  COMMAND(const char*, int); //needs to be defined. note ptr is const

因此,当您执行

时,您会得到错误:
  systemCommands[0] = new COMMAND("halt", HALT);

尝试用prototype: COMMAND(char*, int);调用构造函数