【发布时间】:2017-11-30 19:11:07
【问题描述】:
我正在尝试为我的班级项目运行此代码,但我不断在 Hex.cpp 文件的第 20 行收到 C2679 错误。完整的错误是二进制 '[': no operator found 它采用 'std::_Vector_iterator>>' 类型的右手操作数(或者没有可接受的转换)。我确实在第 154 行遇到了另一个错误,但我想事先解决第一个错误。如果有人能帮我解决这个问题,我将不胜感激。
#include "Hex.h"
#include <iostream>
#include <string.h>
#include <stdio.h>
#include <vector>
using namespace std;
void Hex::HexToBin(string hex) {
{
//vector<char> binnum;
char hexdec[100];
string h = hex;
strcpy_s(hexdec, h.c_str());
vector<char> word(hexdec, hexdec + sizeof hexdec / sizeof hexdec[0]);
vector<char>::iterator i;
i = word.begin();
while (i != word.end())
{
switch (word[i]) //error here
{
case '0': cout << "0000";
binum.push_back((0));
binum.push_back(0);
binum.push_back(0);
binum.push_back(0);
break;
case '1': cout << "0001";
binum.push_back(0);
binum.push_back(0);
binum.push_back(0);
binum.push_back(1);
break;
case '2': cout << "0010";
binum.push_back(0);
binum.push_back(0);
binum.push_back(1);
binum.push_back(0);
break;
case '3': cout << "0011";
binum.push_back(0);
binum.push_back(0);
binum.push_back(1);
binum.push_back(1);
break;
case '4': cout << "0100";
binum.push_back(0);
binum.push_back(1);
binum.push_back(0);
binum.push_back(0);
break;
case '5': cout << "0101";
binum.push_back(0);
binum.push_back(1);
binum.push_back(0);
binum.push_back(1);
break;
case '6': cout << "0110";
binum.push_back(0);
binum.push_back(1);
binum.push_back(1);
binum.push_back(0);
break;
case '7': cout << "0111";
binum.push_back(0);
binum.push_back(1);
binum.push_back(1);
binum.push_back(1);
break;
case '8': cout << "1000";
binum.push_back(1);
binum.push_back(0);
binum.push_back(0);
binum.push_back(0);
break;
case '9': cout << "1001";
binum.push_back(1);
binum.push_back(0);
binum.push_back(0);
binum.push_back(1);
break;
case 'A': cout << "1010";
binum.push_back(1);
binum.push_back(0);
binum.push_back(1);
binum.push_back(0);
break;
case 'B': cout << "1011";
binum.push_back(1);
binum.push_back(0);
binum.push_back(1);
binum.push_back(1);
break;
case 'C': cout << "1100";
binum.push_back(1);
binum.push_back(1);
binum.push_back(0);
binum.push_back(0);
break;
case 'D': cout << "1101";
binum.push_back(1);
binum.push_back(1);
binum.push_back(0);
binum.push_back(1);
break;
case 'E': cout << "1110";
binum.push_back(1);
binum.push_back(1);
binum.push_back(1);
binum.push_back(0);
break;
case 'F': cout << "1111";
binum.push_back(1);
binum.push_back(1);
binum.push_back(1);
binum.push_back(1);
break;
case 'a': cout << "1010";
binum.push_back(1);
binum.push_back(0);
binum.push_back(1);
binum.push_back(0);
break;
case 'b': cout << "1011";
binum.push_back(1);
binum.push_back(0);
binum.push_back(1);
binum.push_back(1);
break;
case 'c': cout << "1100";
binum.push_back(1);
binum.push_back(1);
binum.push_back(0);
binum.push_back(0);
break;
case 'd': cout << "1101";
binum.push_back(1);
binum.push_back(1);
binum.push_back(0);
binum.push_back(1);
break;
case 'e': cout << "1110";
binum.push_back(1);
binum.push_back(1);
binum.push_back(1);
binum.push_back(0);
break;
case 'f': cout << "1111";
binum.push_back(1);
binum.push_back(1);
binum.push_back(1);
binum.push_back(1);
break;
default: cout << "\nInvalid hexadecimal digit " << hexdec[i]; //error here
}
i++;
}
}
}
#include <iostream>
#include <string>
#include <vector>
//takes a string and stores, accept a string, convert to binary
/***************************************************************
Class Hex
This class will take a hexidecimal and convert it to a binary
number which will then be stored to be used in other class files.
***************************************************************/
using namespace std;
class Hex {
public:
void HexToBin(string s);
private:
vector<char> binum;
vector<char> word;
vector<int>::const_iterator i;
};
#include <iostream>
#include "Hex.h"
using namespace std;
int main()
{
// VARIABLE DECLARATIONS
Hex hex;
hex.HexToBin("A24B");
return 0;
}
【问题讨论】:
-
i不是size_type(std::vector::operator[] 要求)它是一个迭代器。为什么不使用range based loop? -
std::string 具有开始/结束迭代器和运算符 []。使用它。
-
有更简单的方法来做你想做的事,而不需要大开关。
标签: c++ c++11 visual-c++