C ++代码错误。我在这里做错了什么?

时间:2018-09-26 17:27:48

标签: c++

我是C ++的新手,我正在创建一个分解IP地址并将值放在“。”之间的函数。排列成一个数组。我收到此错误:

Assigning to 'std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::value_type' (aka 'char') from incompatible type 'std::__1::basic_string<char>'

我在做什么错了?

//  main.cpp
//  Subnet calculator

#include <iostream>
using namespace std;

string ip2arr(string ehh, string arr);

int main(void){

}

string ip2arr(string ehh, string arr){
    ehh+=".";
    int list_counter = 0;
    for (int i = 0, f = 0; i < ehh.length(); i++) {
        if (ehh[i] == '.') {
            arr[list_counter] = ehh.substr(f,i-1-f+1);
            list_counter++;
            f = i+1;
        }
    }
}

2 个答案:

答案 0 :(得分:1)

该错误似乎发生在行上

arr[list_counter] = ehh.substr(f,i-1-f+1);

在这里,arr是一个字符串,因此arr[list_counter]是一个字符。但是,您尝试将ehh.substr(f,i-1-f+1)的结果分配给它,它是一个字符串。

我无法建议您如何解决此问题,因为我不确定您要做什么。请注意,还有另一个问题:您正在尝试为通过值传递给函数的参数分配值。这不会影响调用函数中变量的值。您最有可能应该在函数中建立结果并为return建立一个值,而不是更改其参数的值。

答案 1 :(得分:1)

  

我在做什么错了?

好吧,让我们开始

  1. 您的代码正在使用std::string,但是您缺少#include <string>指令
  2. 您的函数返回std::string,但没有return语句
  3. 您传递了参数arr,但不使用它,而是尝试为其分配值
  4. 您访问arr中的元素而不检查索引是否有效
  5. 您正在尝试将std::string分配给类型char的左值
  6. 这不是错误,但是您会警告您将signed int istd::string::length()返回的无符号值进行比较

我希望我什么都不会错过