Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > C++ > Weird Output

Reply
Thread Tools

Weird Output

 
 
alice
Guest
Posts: n/a
 
      09-29-2005
Hi,
When I compiles the following program with g++, it gives the following
output:

[root@localhost C++]# g++ -o list list.C
list.C: In function `int main()':
list.C:116: jump to case label
list.C:110: crosses initialization of `std::string data'
list.C:120: jump to case label
list.C:110: crosses initialization of `std::string data'


Internal compiler error: Error reporting routines re-entered.
Please submit a full bug report,
with preprocessed source if appropriate.
See <URL:http://bugzilla.redhat.com/bugzilla/> for instructions.
[root@localhost C++]#

However, if I changes the template type to int in the statement
LinkedList<string> list( i.e. to change the statement to
LinkedList<int> list,
then then program compiles properly. Can anybody help to sort out the
error.

Here is the complete program:

using namespace std;
#include <iostream>
#include <string>

template <class T>
class ListElement
{
public:
ListElement(ListElement<T> *,T );
T const & Data() const;
ListElement<T> ** Next() ;

private:

ListElement<T> *next;
T data;
};

template <class T>
class LinkedList
{
public:
LinkedList();
void display();
void Append(T item);
private:
ListElement<T> *Head, *Tail;
};

// Implementing the various functions of the ListElement class.
template <class T>
ListElement<T>:: ListElement(ListElement<T> * _next, T _data):
data(_data),next(_next)
{
}

template <class T>
T const & ListElement<T>:: Data() const
{
return data;
}

template <class T>
ListElement<T> ** ListElement<T>:: Next()
{
return &next;
}

// ListElement class functions implemented.

//Implementing the various functions of the LinkedList class.

template <class T>
void LinkedList<T>:: display()
{
ListElement<T> *tmp;
tmp=Head;
if(Head == NULL)
{
cout<<"No elements in the List\n";
return;
}

while(tmp!=NULL)
{
cout<< tmp->Data() << "\n";
tmp=*tmp->Next();
}
return ;
}

template <class T>
LinkedList<T>:: LinkedList()
:Head(NULL), Tail( NULL)
{
}

template <class T>
void LinkedList<T>:: Append (T item)
{
ListElement<T> *tmp;
tmp = new ListElement<T>(NULL, item);

if(Head == NULL){
Head = Tail = tmp;
return ;
}
*Tail->Next() = tmp;
Tail = tmp;
return;
}


LinkedList<string> list;

int main(void)
{

// LinkedList<string> list;
int choice;
cout<<"1: Display\n2: Prepend\n3: Exit\n ";
cin>>choice;
switch(choice)
{
case 1:
list.display();
break;

case 2:
string data;
cout<<"enter the data to be added to the list\n";
cin>>data;
list.Append(data);
break;

case 3:
exit(1);
break;

default:
cout<<"Invalid Choice\n";
break;

}

main();
return 0;
}




 
Reply With Quote
 
 
 
 
John Harrison
Guest
Posts: n/a
 
      09-29-2005
alice wrote:
> Hi,
> When I compiles the following program with g++, it gives the following
> output:
>
> [root@localhost C++]# g++ -o list list.C
> list.C: In function `int main()':
> list.C:116: jump to case label
> list.C:110: crosses initialization of `std::string data'
> list.C:120: jump to case label
> list.C:110: crosses initialization of `std::string data'
>
>
> Internal compiler error: Error reporting routines re-entered.
> Please submit a full bug report,
> with preprocessed source if appropriate.
> See <URL:http://bugzilla.redhat.com/bugzilla/> for instructions.
> [root@localhost C++]#
>
> However, if I changes the template type to int in the statement
> LinkedList<string> list( i.e. to change the statement to
> LinkedList<int> list,
> then then program compiles properly. Can anybody help to sort out the
> error.
>


> int main(void)
> {
>
> // LinkedList<string> list;
> int choice;
> cout<<"1: Display\n2: Prepend\n3: Exit\n ";
> cin>>choice;
> switch(choice)
> {
> case 1:
> list.display();
> break;
>
> case 2:
> string data;
> cout<<"enter the data to be added to the list\n";
> cin>>data;
> list.Append(data);
> break;
>
> case 3:
> exit(1);
> break;
>
> default:
> cout<<"Invalid Choice\n";
> break;
>


Imagine the program has reached this point. Now does the compiler
destroy the string variable 'data' or not? If you got here via case 1, 3
or default then no, but if you got here via case 2 then yes. This kind
of this is too much for the compiler to keep track of so it is forbidden.

Change case 2 to this

case 2:
{
string data;
cout<<"enter the data to be added to the list\n";
cin>>data;
list.Append(data);
}
break;

Now only case 2 uses the data variable and the problem goes away.

john
 
Reply With Quote
 
 
 
 
Mike Wahler
Guest
Posts: n/a
 
      09-29-2005

"alice" <> wrote in message
news: oups.com...
> Hi,
> When I compiles the following program with g++, it gives the following
> output:
>
> [root@localhost C++]# g++ -o list list.C
> list.C: In function `int main()':
> list.C:116: jump to case label
> list.C:110: crosses initialization of `std::string data'
> list.C:120: jump to case label
> list.C:110: crosses initialization of `std::string data'


My Visual C++ documentation sums up the problem fairly well:
================================================== =======================
Compiler Error C2360
initialization of 'identifier' is skipped by 'case' label

The specified identifier initialization can be skipped in a switch
statement.

It is illegal to jump past a declaration with an initializer unless the
declaration is enclosed in a block.

The scope of the initialized variable lasts until the end of the switch
statement unless it is declared in an enclosed block within the switch
statement.

The following is an example of this error:

void func( void )
{
int x;
switch ( x )
{
case 0 :
int i = 1; // error, skipped by case 1
{ int j = 1; } // OK, initialized in enclosing block
case 1 :
int k = 1; // OK, initialization not skipped
}
}

================================================== =======================

Though it's not explicit in the code, the std::string object
does have an implicit initializer. (I.e. it's not possible
(by design) to define a string object without initializing
it -- lack of a specific initializer causes an empty string
to be created.

It works with 'int' because an 'int' object can be created
without initializing it (but I always recommend against doing that).

>
>
> Internal compiler error: Error reporting routines re-entered.
> Please submit a full bug report,
> with preprocessed source if appropriate.
> See <URL:http://bugzilla.redhat.com/bugzilla/> for instructions.
> [root@localhost C++]#


Don't be concerned with this error unless it still occurs
after all the other errors have been fixed.

>
> However, if I changes the template type to int in the statement
> LinkedList<string> list( i.e. to change the statement to
> LinkedList<int> list,
> then then program compiles properly. Can anybody help to sort out the
> error.
>
> Here is the complete program:
>
> using namespace std;


You need to move this line to after the #include
directives. At this point there's no namespace 'std'.

> #include <iostream>
> #include <string>


using namespace std;

>

[snip]
> switch(choice)
> {
> case 1:
> list.display();
> break;
>
> case 2:
> string data;
> cout<<"enter the data to be added to the list\n";
> cin>>data;
> list.Append(data);
> break;
>
> case 3:
> exit(1);
> break;
>
> default:
> cout<<"Invalid Choice\n";
> break;
>
> }
>
> main();


What is this for? It appears to be an attempt to have
'main()' call itself (recursion, and with no way to
terminate the recursion). Also, AFAIK, it's not legal
for 'main()' to call itself in C++.

> return 0;
> }


-Mike



 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Re: A Weird Appearance for a Weird Site David Segall HTML 0 01-22-2011 04:50 AM
Re: A Weird Appearance for a Weird Site Beauregard T. Shagnasty HTML 1 01-21-2011 04:17 PM
Re: A Weird Appearance for a Weird Site richard HTML 0 01-21-2011 07:10 AM
Re: A Weird Appearance for a Weird Site dorayme HTML 1 01-21-2011 06:51 AM
Re: A Weird Appearance for a Weird Site richard HTML 0 01-21-2011 06:46 AM



Advertisments
 



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57