从'char'到'const char *'的转换无效

时间:2011-11-28 02:54:01

标签: c++

我有一个程序,使用randomCharacter函数和随机字符串,使用randomString函数生成单个随机字符。后者利用前者,breedWithMutation使用randomCharacter概率地改变基因序列的表示。

#include <ctime>
#include <boost/random.hpp>

typedef boost::mt19937 randAlgorithm;

int mutationsPerGeneration = 100;
double probabilityOfMutation = 0.05;
string potentialAlleles = "abcdefghijklmnopqrstuvwxyz ";
size_t numberOfAlleles = potentialAlleles.size();

double random01(randAlgorithm & engine)
{
  boost::uniform_real<double> u01;
  return u01(engine);
}

int randomInteger(randAlgorithm & engine, size_t min, size_t max) {
  boost::uniform_int<> minmax(min, max);
  return minmax(engine);
}

string randomCharacter(randAlgorithm & engine, string charSet, size_t charSetSize) {
  return charSet[randomInteger(engine, 0, charSetSize)];
}

string randomString(randAlgorithm & engine, size_t length, string charSet, size_t charSetSize) {
  string s;
  s.reserve(length);
  for (int i = 0; i < length; i++) {
    s.append(randomCharacter(engine, charSet, charSetSize));
  }
  return s;
}

string breedWithMutation(randAlgorithm & engine, string originalGenome, size_t genomeSize) {
  string mutatedGenome;
  mutatedGenome.reserve(genomeSize);
  double mutationDraw;
  for (size_t i = 0; i < genomeSize; i++) {
    mutationDraw = random01(engine);
    if (mutationDraw < probabilityOfMutation) { //The allele undergoes mutation
      mutatedGenome.append(randomCharacter(engine, potentialAlleles, numberOfAlleles));
    }
    else {
      mutatedGenome.append(originalGenome[i]);
    }
  }
  return mutatedGenome;
}

但是,当我构建应用程序时,我收到了这些错误:

    main.cpp: In function ‘std::string randomCharacter(randAlgorithm&, std::string, size_t)’:
main.cpp:31:55: error: invalid conversion from ‘char’ to ‘const char*’
main.cpp:31:55: error:   initializing argument 1 of ‘std::basic_string<_CharT, _Traits, _Alloc>::basic_string(const _CharT*, const _Alloc&) [with _CharT = char, _Traits = std::char_traits<char>, _Alloc = std::allocator<char>]’
main.cpp: In function ‘std::string breedWithMutation(randAlgorithm&, std::string, size_t)’:
main.cpp:53:45: error: invalid conversion from ‘char’ to ‘const char*’
main.cpp:53:45: error:   initializing argument 1 of ‘std::basic_string<_CharT, _Traits, _Alloc>& std::basic_string<_CharT, _Traits, _Alloc>::append(const _CharT*) [with _CharT = char, _Traits = std::char_traits<char>, _Alloc = std::allocator<char>, std::basic_string<_CharT, _Traits, _Alloc> = std::basic_string<char>]’

错误中的行号没有完美排列,我意识到,但前两个错误引用randomCharacter中的唯一行,第三个和第四个错误引用此行:{{1在mutatedGenome.append(originalGenome[i]);中。导致此错误的原因是什么?

3 个答案:

答案 0 :(得分:4)

在C ++中,charstring是截然不同的类型。我们无法将char值隐式转换为string(正如您在randomCharacter中尝试的那样)。

您可以将randomCharacter的返回类型更改为char而不是string,但这可能也需要在其他地方进行更改(我没有详细检查过您的代码)。< / p>

答案 1 :(得分:1)

randomCharacter()的返回类型更改为char

答案 2 :(得分:1)

这不是无效转换为const char这是无效转换为const char*普通C中的字符串只是字符数组,或const char* s。所以,你正在使用一个你应该使用字符串的单个字符。

检查一个实例:您已设置randomCharacter()以返回C ++字符串,但实际上,您尝试从charSet返回单个字符。对我来说,让函数返回char更有意义,但这是你的决定。