Pisze program, który ma za zadanie wyświetlać ip zależnie od dwóch parametrów konstruktora. Pierwszy parametr to nasze ip gdzie 3 ostatnie cyfry muszą być potęgą liczby 2. Drugi parametr odpowiada za ilość wyświetlanych ip'ków (int scope) i również musi być potęgą liczby 2. W trzecim jest źle podany drugi argument. Natomiast w czwartym źle są podane 3 ostanie cyfry, bo 138 nie jest potega 2, więc powinien wyświetlić się wyjątek. Kiedy próbuje to skompilować wywala mi błąd w 56 linijce:
Nieobsłużony wyjątek w lokalizacji 0x74DEC762 w Project9.exe: wyjątek języka Microsoft C++: std::basic_string<char,std::char_traits<char>,std::allocator<char> > w lokalizacji pamięci 0x010FFA94.: wystąpił wyjątek
Ktoś rozumie jak to naprawić?
Kod:
```#include<iostream>
#include<string>
#include<cstdlib>
using namespace std;
class IP {
protected:
string ip;
int scope;
public:
IP(string ip, int scope) {
this->ip = ip;
this->scope = scope;
};
int getPieceIP(){
string pieceIp = ip.substr(12, 3);
int numPieceIp = atoi(pieceIp.c_str());
int powOfTwo = 2;
while (numPieceIp >= powOfTwo) {
if (numPieceIp == powOfTwo) {
return numPieceIp;
}
else powOfTwo = powOfTwo * 2;
}
if (numPieceIp < powOfTwo) {
string wyjatek = "invalid IP number";
throw wyjatek;
}
}
string getNewIP(int a) {
string mainIP = ip.substr(0, 12);
string newIP = mainIP + to_string(a);
return newIP;
}
void printIP(){
int pieceIP = getPieceIP();
int powOfTwo = 2;
while (scope >= powOfTwo) {
if (powOfTwo == scope) {
while (scope != 0) {
cout << getNewIP(pieceIP) << endl;
++pieceIP;
--scope;
}
cout << endl;
}
else powOfTwo = powOfTwo * 2;
}
if (scope < powOfTwo) {
string wyjatek = "invalid range";
throw wyjatek;
}
}
};
int main() {
IP *ip1 = new IP("212.111.212.128", 2);
IP *ip2 = new IP("212.112.212.128", 4);
IP *ip3 = new IP("212.113.212.128", 6);
IP *ip4 = new IP("212.114.212.138", 4);
ip1->printIP();
ip2->printIP();
try
{
ip3->printIP();
}
catch (string w)
{
cout << "Exception - " << w << endl;
}
try
{
ip4->printIP();
}
catch (string w)
{
cout << "Exception - " << w << endl;
}
system("pause");
return 0;
}