473,387 Members | 1,834 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,387 software developers and data experts.

Weird Output

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;
}


Sep 29 '05 #1
2 6750
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
Sep 29 '05 #2

"alice" <al***********@yahoo.com> wrote in message
news:11**********************@z14g2000cwz.googlegr 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

Sep 29 '05 #3

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

5
by: redneck_kiwi | last post by:
All: I have an application that has been working well for 3-4 months now without any issues (that I am aware of). A day or two ago, one of our employees that use this application called to say...
7
by: Yamin | last post by:
I found some code that seems a bit weird and is refusing to compile on GCC...it apparently used to compile fine on other comilers. typedef void ASY_TESTPROC_T __((OIDC_T lastmatch, int compc,...
10
by: Chris Mantoulidis | last post by:
I see some really weird output from this program (compiled with GCC 3.3.2 under Linux). #include <iostream> using namespace std; int main() { char *s; s = "test1"; cout << "s = " << s << "...
1
by: Chris Mantoulidis | last post by:
PROBLEM: I'm having some weird problems with string::find() (in ParamGenerate()), but since I'm not sure if that is the source of all bad output in my program, I'm posting least code that's...
11
by: Les Paul | last post by:
I'm trying to design an HTML page that can edit itself. In essence, it's just like a Wiki page, but my own very simple version. It's a page full of plain old HTML content, and then at the bottom,...
10
by: Bonj | last post by:
Hello. I hope somebody can help me on this, because I'm running out of options to turn to. I have almost solved my regular expression function. Basically it works OK if unicode is defined. It...
5
by: Jim Strathmeyer | last post by:
So I'm having some weird problems with file output. If I try to boil this problem down to a small, simple program to just show what problems I'm having, I can't get the same problematic behavior. I...
0
by: spacelabstudio | last post by:
Hi, I'm observing some weird behavior and have written the following test program to demonstrate. This works under cygwin/WinXP but not Gentoo(kernel 2.6): huh.py...
5
by: Pupeno | last post by:
Hello, I am experiencing a weird behavior that is driving me crazy. I have module called Sensors containing, among other things: class Manager: def getStatus(self): print "getStatus(self=%s)"...
10
by: alsmeirelles | last post by:
Hi all, I Have run this test: Private Sub test() Dim d As Double Dim f As Single Dim output As String d = 8888888888888.8887
0
by: Charles Arthur | last post by:
How do i turn on java script on a villaon, callus and itel keypad mobile phone
0
by: ryjfgjl | last post by:
If we have dozens or hundreds of excel to import into the database, if we use the excel import function provided by database editors such as navicat, it will be extremely tedious and time-consuming...
0
by: ryjfgjl | last post by:
In our work, we often receive Excel tables with data in the same format. If we want to analyze these data, it can be difficult to analyze them because the data is spread across multiple Excel files...
0
BarryA
by: BarryA | last post by:
What are the essential steps and strategies outlined in the Data Structures and Algorithms (DSA) roadmap for aspiring data scientists? How can individuals effectively utilize this roadmap to progress...
1
by: nemocccc | last post by:
hello, everyone, I want to develop a software for my android phone for daily needs, any suggestions?
0
marktang
by: marktang | last post by:
ONU (Optical Network Unit) is one of the key components for providing high-speed Internet services. Its primary function is to act as an endpoint device located at the user's premises. However,...
0
by: Hystou | last post by:
Most computers default to English, but sometimes we require a different language, especially when relocating. Forgot to request a specific language before your computer shipped? No problem! You can...
0
Oralloy
by: Oralloy | last post by:
Hello folks, I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>". The problem is that using the GNU compilers,...
0
jinu1996
by: jinu1996 | last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.