错误:从char到const char的无效转换*

时间:2014-10-23 23:26:51

标签: c++ c++11 boost

我在以下代码中收到了名义错误。

rna_transcription_test.cpp

#include "rna_transcription.h"
#define BOOST_TEST_MAIN
#include <boost/test/unit_test.hpp>

BOOST_AUTO_TEST_CASE(transcribes_cytidine_to_guanosine)
{
    BOOST_REQUIRE_EQUAL('G', transcription::to_rna('C'));
}

#if defined(EXERCISM_RUN_ALL_TESTS)
BOOST_AUTO_TEST_CASE(transcribes_guanosine_to_cytidine)
{
BOOST_REQUIRE_EQUAL('C', transcription::to_rna('G'));
}

BOOST_AUTO_TEST_CASE(transcribes_adenosine_to_uracil)
{
    BOOST_REQUIRE_EQUAL('U', transcription::to_rna('A'));
}

BOOST_AUTO_TEST_CASE(transcribes_thymidine_to_adenosine)
{
    BOOST_REQUIRE_EQUAL('A', transcription::to_rna('T'));
}

BOOST_AUTO_TEST_CASE(transcribes_all_dna_nucleotides_to_their_rna_complements)
{
    BOOST_REQUIRE_EQUAL("UGCACCAGAAUU", transcription::to_rna("ACGTGGTCTTAA"));
}
#endif

rna_transcription.h

#include <string>

using namespace std;

class transcription
{
    public:
        static string to_rna(string input)
        {
            string returnValue;
            for(char& c:input)
            {
                if(c == 'A')
                {
                    returnValue.push_back('U');
                }
                else if(c == 'T')
                {
                    returnValue.push_back('A');
                }
                else if(c == 'G')
                {
                    returnValue.push_back('C');
                }
                else if(c == 'C')
                {
                    returnValue.push_back('G');
                }
            }
            return returnValue;
      };
};

我知道我刚刚发布了这个,但我感觉错误发生在rna_transcription_test.cpp中,因为我通过stackoverflow检查了rna_transcription.h并且他们说它没有bug。那么有人可以检查这两个文件,并确保我把一切都搞定了吗?

1 个答案:

答案 0 :(得分:2)

std::string没有char构造函数。如果您想从单个char构建字符串,则必须说std::string(1, 'A')

它没有char构造函数,因为char是一个整数,整数参数会自动转换为字符,导致非常奇怪的错误。

因此,请将您的来电从transcription::to_rna('A')更改为transcription::to_rna("A")

同时将测试比较更改为字符串而不是字符。

更新

根据合法化,测试是完美的。所以答案不是改变测试而是改变你的代码。

您需要添加另一个接收单个char的to_rna重载函数。您可能希望更新代码,以便在字符串上循环调用每个字符的单个char函数。这样可以减少两次编写if / then系列的重复。