【问题标题】:Invalid Conversion Problem in C++C++ 中的无效转换问题
【发布时间】:2009-03-05 05:15:26
【问题描述】:

我有以下sn-p:

string base= tag1[j];

这给出了无效的转换错误。

我下面的代码有什么问题?我该如何克服它。

完整代码在这里:

#include <iostream>
#include <vector>
#include <fstream>
#include <sstream>
#include <time.h>
using namespace std;


int main  ( int arg_count, char *arg_vec[] ) {
    if (arg_count < 3 ) {
        cerr << "expected one argument" << endl;
        return EXIT_FAILURE;
    }

    // Initialize Random Seed
    srand (time(NULL));

    string line;
    string tag1     = arg_vec[1];
    string tag2     = arg_vec[2];

    double SubsRate = 0.003;
    double nofTag   = static_cast<double>(atoi(arg_vec[3])); 

    vector <string> DNA;
      DNA.push_back("A");
      DNA.push_back("C");
      DNA.push_back("G");
      DNA.push_back("T");


      for (unsigned i=0; i < nofTag ; i++) {

          int toSub = rand() % 1000 + 1;

          if (toSub <= (SubsRate * 1000)) {
              // Mutate
              cout << toSub << " Sub" << endl;

              int mutateNo = 0;
              for (int j=0; j < tag1.size(); j++) {

                  mutateNo++;


                  string base = tag1[j]; // This fail

                  int dnaNo = rand() % 4;

                  if (mutateNo <= 3) {
                     // Mutation happen at most at 3 position
                        base = DNA[dnaNo];
                  }

                  cout << tag1[j] << " " << dnaNo << " " << base  <<  endl;
                  //cout << base;

              }
               cout << endl;

          }
          else {
              // Don't mutate
              //cout << tag1 << endl;
          }

      }
    return 0;
}

为什么在循环字符串时会出现从 charconst char* 的无效转换?

【问题讨论】:

    标签: c++ string char


    【解决方案1】:

    std::string operator [] 返回单个字符。字符串不能用单个字符实例化。

    用途:

    改为string base = string( 1, tag1[j] )

    【讨论】:

      【解决方案2】:

      改成

      char base = tag1[j];
      

      【讨论】:

      • 但这会与“if(mutateNo
      • @foolishbrat:因为 OP 选择了错误的 DNA 类型,应该是 vector(char),不是吗?
      【解决方案3】:

      字符串标签1 = arg_vec[1];

      tag1 是一个字符串字面量。

      string base = tag1[j]; 被初始化为 char 而不是 char *

      试试看,char base = tag1[j];

      【讨论】:

        【解决方案4】:

        string 没有构造函数,它只需要一个char(这就是tag1[j])。你有几个选择:

        string base;  // construct a default string
        base  = tag1[j]; // set it to a char (there is an 
                         //   assignment from char to string, 
                         //   even if there's no constructor
        

        string base( 1, tag1[j]);  // create a string with a single char 
        

        或者作为Josh mentioned,您可以将base 定义为char,因为无论如何您都没有对其执行任何字符串操作。如果您决定这样做,您需要将DNA 更改为vector&lt;char&gt;(并将DNA 的初始化更改为使用字符而不是字符串)。

        【讨论】:

          【解决方案5】:

          一个问题是错误消息说程序需要一个参数,而实际上它需要两个参数。您可能应该遵循 Unix 约定并显示所需的用法(或相反):

          if (arg_count != 3) {
              cerr << "Usage: " << arg_vec[0] << " tag1 tag2";
              return EXIT_FAILURE;
          }
          

          “argc”和“argv”这两个名字非常传统(我见过的唯一主要替代品是“ac”和“av”)。可能值得坚持下去。

          【讨论】:

          • 我假设你的意思是 'argv' 非常传统。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-06-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-11-17
          相关资源
          最近更新 更多