User Name Password Register
DaniWeb IT Discussion Community
All
What is DaniWeb IT Discussion Community?
You're currently browsing the C++ section within the Software Development category of DaniWeb, a massive community of 425,895 software developers, web developers, Internet marketers, and tech gurus who are all enthusiastic about making contacts, networking, and learning from each other. In fact, there are 1,932 IT professionals currently interacting right now! Registration is free, only takes a minute and lets you enjoy all of the interactive features of the site.
Please support our C++ advertiser: Programming Forums
Views: 1543 | Replies: 9 | Solved
Reply
Join Date: May 2008
Posts: 96
Reputation: QuantNeeds is an unknown quantity at this point 
Rep Power: 1
Solved Threads: 0
QuantNeeds QuantNeeds is offline Offline
Junior Poster in Training

error C2446: '==' : no conversion from 'int' to 'char *'

  #1  
Jul 7th, 2008
Help I am having the following error:
error C2446: '==' : no conversion from 'int' to 'char *'

When I tried the following it ignores my counter and I am not sure why. This is a serious problem because it creates and infinite loop that keeps printing.

if(char(seating[openSeat + potential]) == '#')
      counter2++;

My code is the following:

void Tickets::displayOptions()
{
cout << "The following blocks are available: " << endl;

for(int openRow = 1; openRow < row; openRow++)
{
cout << "row " << openRow << ": ";
for(int openSeat = 1; openSeat < seat; openSeat++)
{
      int neededSeatsOpen = (seat-1) - (openSeat - 1);
      if(neededSeatsOpen >= qty)
      {
	int counter2 = 0;				
	for(int potential = qty - 1; potential >= 0; potential--)
	{
                     if(char(seating[openSeat + potential]) == '#')
	     {
		counter2++;
	      }
	}
	      if(counter2 = qty)
	     {
		for(int available = 0; available <= qty - 1; available++)
		{
	                	cout << seating[openSeat + available] << " ";
		}
                     }
       } // end if
} // nested end for
}// end for
} // end function display Options
AddThis Social Bookmark Button
Reply With Quote  
Join Date: Jul 2005
Posts: 1,154
Reputation: Lerner is just really nice Lerner is just really nice Lerner is just really nice Lerner is just really nice 
Rep Power: 9
Solved Threads: 150
Lerner Lerner is offline Offline
Veteran Poster

Re: error C2446: '==' : no conversion from 'int' to 'char *'

  #2  
Jul 7th, 2008
Why the cast to type char regarding the variable seating[]? Or in otherwords, seating is an array of what type?
Reply With Quote  
Join Date: May 2008
Posts: 96
Reputation: QuantNeeds is an unknown quantity at this point 
Rep Power: 1
Solved Threads: 0
QuantNeeds QuantNeeds is offline Offline
Junior Poster in Training

Re: error C2446: '==' : no conversion from 'int' to 'char *'

  #3  
Jul 7th, 2008
Originally Posted by Lerner View Post
Why the cast to type char regarding the variable seating[]? Or in otherwords, seating is an array of what type?


seating is an array of type char
Last edited by QuantNeeds : Jul 7th, 2008 at 4:13 pm.
Reply With Quote  
Join Date: Jul 2005
Posts: 1,154
Reputation: Lerner is just really nice Lerner is just really nice Lerner is just really nice Lerner is just really nice 
Rep Power: 9
Solved Threads: 150
Lerner Lerner is offline Offline
Veteran Poster

Re: error C2446: '==' : no conversion from 'int' to 'char *'

  #4  
Jul 7th, 2008
If seating is an array of char, then there is no need to cast seating[] to type char because seating [] is a char.

I don't see where you are trying to equate an int with a char pointer or char array, though I've never tried to cast a variable to it's own type to know what would happen. If dropping the cast to type char doesn't work then trying to isolate the error some other way will be needed for me to be of help.

I do know that this isn't doing what you want:

if(counter2 = qty)

That should be the equal operator, not the asssignment operator.
Reply With Quote  
Join Date: Oct 2007
Location: Cherry Hill, NJ
Posts: 1,876
Reputation: Duoas is a splendid one to behold Duoas is a splendid one to behold Duoas is a splendid one to behold Duoas is a splendid one to behold Duoas is a splendid one to behold Duoas is a splendid one to behold Duoas is a splendid one to behold 
Rep Power: 11
Solved Threads: 193
Featured Poster
Duoas's Avatar
Duoas Duoas is offline Offline
Posting Virtuoso

Re: error C2446: '==' : no conversion from 'int' to 'char *'

  #5  
Jul 7th, 2008
The compiler believes that seating is an integer. The OP placed the cast there to try to get rid of the error message.

Can we see the class definition where seating is declared? Is there anything else between the class and the variable? Did you #include the header in the .cpp file?

Hope this helps.
Reply With Quote  
Join Date: May 2008
Posts: 96
Reputation: QuantNeeds is an unknown quantity at this point 
Rep Power: 1
Solved Threads: 0
QuantNeeds QuantNeeds is offline Offline
Junior Poster in Training

Re: error C2446: '==' : no conversion from 'int' to 'char *'

  #6  
Jul 7th, 2008
Originally Posted by Lerner View Post
If seating is an array of char, then there is no need to cast seating[] to type char because seating [] is a char.

I don't see where you are trying to equate an int with a char pointer or char array, though I've never tried to cast a variable to it's own type to know what would happen. If dropping the cast to type char doesn't work then trying to isolate the error some other way will be needed for me to be of help.

I do know that this isn't doing what you want:

if(counter2 = qty)

That should be the equal operator, not the asssignment operator.


thank you - I did not even catch that.
Reply With Quote  
Join Date: May 2008
Posts: 96
Reputation: QuantNeeds is an unknown quantity at this point 
Rep Power: 1
Solved Threads: 0
QuantNeeds QuantNeeds is offline Offline
Junior Poster in Training

Re: error C2446: '==' : no conversion from 'int' to 'char *'

  #7  
Jul 7th, 2008
Originally Posted by Duoas View Post
The compiler believes that seating is an integer. The OP placed the cast there to try to get rid of the error message.

Can we see the class definition where seating is declared? Is there anything else between the class and the variable? Did you #include the header in the .cpp file?

Hope this helps.


Sure - below is my entire code. Where I actually call the displayOptions() function I commented out so I could work with my other functions.
Basically if I do not use the cast char to convert it and only use this:
if(seating[openSeat + potential] == '#')
{
     counter2++;
}

I get the following error:
.cpp(259) : error C2446: '==' : no conversion from 'int' to 'char *'
.cpp(259) : error C2040: '==' : 'char [31]' differs in levels of indirection from 'int'

Hence I left my code as with the char but there is still something strange going on in that displayOptions() function that produces garbage and that is why I cannot use my function.

Please help. My code is the following:

#include <iostream>
using std::cout; 
using std::cin;
using std::endl;

#include <iomanip>
using std::setw;
using std::setprecision;						


#include <cstdlib> // contains prototypes for functions srand and rand
using std::rand;
using std::srand;

#include <ctime> // contains prototype for function time
using std::time;

#include "Tickets.h"	// include definition of class Tickets


//constructor
Tickets::Tickets(int initial)
{
	// initialize the prices array
	int price = 90;
	for (int zone = 1; zone < row; zone++)
	{	
		prices[zone] = price;
		price -= 5;
	}

	// initialize the actual seating array
                for(int eachRow = 0; eachRow < row; eachRow++)
	    for(int eachSeat = 0; eachSeat < seat; eachSeat++)
		seating[eachRow][eachSeat] = '#';

	// initialize the available rows array
	for(int row_i = 1; row_i < row; row_i++)
		rowSeats[row_i] = seat - 1;

	qty = initial;
	ticketPrice = initial;
	totalPrice = initial;
	currentSalesAmount = initial;
	seatsSold = initial;
	theaterAvailability = (row-1)*(seat-1);		
}

void Tickets::displaySeats()
{
	// creater the header
	cout << "Seats: " << setw(2);
	int counter = 1;
	do
	{
	    if(counter <= 9)
	          cout << counter << setw(2);
	    else
	          cout << counter << setw(1);
	}while(++counter <= 30);

	// show the seat availability
	for(int row_i = 1; row_i < row; row_i++)
	{
	    if(row_i <= 9)
	    {
	        cout << "\nrow 0" << row_i << ": ";
                    }
	     else
	     {
		cout << "\nrow " << row_i << ": ";
                     }

	         for (int seat_j = 1; seat_j < seat; seat_j++)
	                 cout << seating[row_i][seat_j] << " ";
	  }
	cout << endl;
}

void Tickets::purchaseTickets()
{
	srand ( (unsigned)time ( 0 ) );	
	
	int counter = rand() % (row - 6);		

	do
	{
		qty = rand() % (seat-21); 
		while(qty == 0)
		{
		  qty = rand() % (seat-21); 
		}
		cout << "\nEnter the ticket quantity: " << qty;
		// validateQty(qty);

		if(theaterAvailability != 0)
		{
			seatProcess();
			totalPrice = 0;
		}
	}while(--counter > 0);
}

void Tickets::seatProcess()
{
	if(checkQtyAvailability(qty) == true)
	{
		if(qty == 1)
		{
			makeSelection();
		}
		else
		{
			//displayOptions();

			for(int choices = qty; choices > 0; choices--)
			{
				makeSelection();
			}
		}
	} // end if

	displayTotalTicketPrices();
	displayTheaterStats();
	displaySeats();
}

void Tickets::makeSelection()
{
	int selectedRow, selectedSeat;
	selectedRow = rand() % row;	
	while(selectedRow == 0)
	{
		selectedRow = rand() % row;	
	}
	cout << "\nSelect a row: " << selectedRow << endl;
	selectedSeat = rand() % seat; 
		while(selectedSeat == 0)
	{
		selectedRow = rand() % row;	
	}
	cout << "Select a seat: " << selectedSeat << endl;	

	validateSelection(selectedRow, selectedSeat);
}

void Tickets::validateSelection(int chosenRow, int chosenSeat)
{
	if(seating[chosenRow][chosenSeat] == '*')
	{
		cout << "Sorry that seat is taken. Please make another selection.";
		makeSelection();
	}
	else 
	{
		seating[chosenRow][chosenSeat] = '*';
		displayTicketPrice(chosenRow);
		compute(chosenRow);
	}	
}

bool Tickets::checkQtyAvailability(int desiredQty)
{
	bool answer = false;

	if (theaterAvailability == 0)
	{
		cout << "Sorry the theater is sold out." << endl;
		answer = false;
	}
	else if(theaterAvailability >= desiredQty)
		answer = true;
	else if(theaterAvailability < desiredQty)
	{
		qty = rand() % seat;
		while(qty == 0)
		{
			qty = rand() % seat;
		}
		cout << "Sorry there are less seats available then the quantity entered. \n Re-enter the ticket quantity: " << qty;
		// validateQty(qty);
		seatProcess();
	}
	return answer;
}

void Tickets::compute(int purchasedRow)
{
	//totalPrice += prices[purchasedRow];
	//currentSalesAmount += prices[purchasedRow];

	totalPrice += ticketPrice;
	currentSalesAmount += ticketPrice;
	seatsSold++;
	theaterAvailability--;
	rowSeats[purchasedRow]--;
}

double Tickets::getTotalPrice()
{
	return totalPrice;
}
double Tickets::getCurrentSalesAmount()
{
	return currentSalesAmount;
}

void Tickets::displayTicketPrice(int purchasedSeat)
{
	ticketPrice = prices[purchasedSeat];
	cout << "The purchased ticket price is: $" << setprecision(2) << ticketPrice << endl;
}

void Tickets::displayTotalTicketPrices()
{
	cout << "\nYour total amount due for the " << qty << " tickets is: $" << setprecision(2) << getTotalPrice() << endl;
}

void Tickets::displayTheaterStats()
{
	cout << "\nCurrent ticket sales amount: $" << setprecision(2) << getCurrentSalesAmount() << endl;
	cout << "Seats sold: " << seatsSold << endl;
	cout << "\n Row" << setw(22) << "Seats Available" << endl;
	cout << "-------       --------------" << endl;

	for(int rowAnalysis = 1; rowAnalysis < row; rowAnalysis++)
		cout << setw(4) << rowAnalysis << setw(17) << rowSeats[rowAnalysis] << endl;

	cout << "Seats available in the entire theater: " << theaterAvailability << endl;
	cout << endl;
}

void Tickets::displayOptions()
{
cout << "\nThe following blocks are available: " << endl;

for(int openRow = 1; openRow < row; openRow++)
{
  cout << "row " << openRow << ": ";
  for(int openSeat = 1; openSeat < seat; openSeat++)
 {
     int neededSeatsOpen = (seat-1) - (openSeat - 1);
     if(neededSeatsOpen >= qty)
     {
           int counter2 = 0;				
           for(int potential = qty - 1; potential >= 0; potential--)
          {
	if(char(seating[openSeat + potential]) == '#')
	{
	   counter2++;
	}
          }

          if(counter2 == qty)
          {
	for(int available = 0; available <= qty - 1; available++)
	{
	   cout << seating[openSeat + available] << " ";
	}
          }
      }
  }
}
} // end function display Options

bool Theater::test()
{
	Tickets testTicket(0);

	bool answer2 = false;
	if(testTicket.prices[9] == 50)
	{
		answer2 = true;
	}
	else
	{
		answer2 = false;
	}

	return answer2;
}

Also, below is my header file:

class Tickets
{
public:
	const static int row = 16;
	const static int seat = 31;

	double prices[row];
	char seating[row][seat];
	int rowSeats[seat];

	Tickets(int);		//constructor

	void displaySeats();
	void purchaseTickets();

	void compute(int);
	void displayTotalTicketPrices();
	void displayTicketPrice(int);
	void displayTheaterStats();
	// void validateQty(int);

	void seatProcess();
	bool checkQtyAvailability(int);
	void makeSelection();
	void validateSelection(int, int);
	void displayOptions();

	double getTotalPrice();
	double getCurrentSalesAmount();
private:
	int qty;
	double ticketPrice;
	double totalPrice;
	double currentSalesAmount;
	int seatsSold;
	int theaterAvailability;

};

class Theater
{
public:
	static bool test();
};
Last edited by QuantNeeds : Jul 7th, 2008 at 8:30 pm.
Reply With Quote  
Join Date: Oct 2007
Location: Cherry Hill, NJ
Posts: 1,876
Reputation: Duoas is a splendid one to behold Duoas is a splendid one to behold Duoas is a splendid one to behold Duoas is a splendid one to behold Duoas is a splendid one to behold Duoas is a splendid one to behold Duoas is a splendid one to behold 
Rep Power: 11
Solved Threads: 193
Featured Poster
Duoas's Avatar
Duoas Duoas is offline Offline
Posting Virtuoso

Re: error C2446: '==' : no conversion from 'int' to 'char *'

  #8  
Jul 7th, 2008
Ah, it is because seating is declared as a 2D array, but you are only indexing one dimension. Hence the error.

Did you mean to treat seating as a 1D array in your function? I'm not sure how you are trying to index the seating array in your function...

If I am reading it right (from just a quick glance over your code) it should be:

if(seating[openRow][openSeat + potential] == '#')

Hope this helps.
Reply With Quote  
Join Date: May 2008
Posts: 96
Reputation: QuantNeeds is an unknown quantity at this point 
Rep Power: 1
Solved Threads: 0
QuantNeeds QuantNeeds is offline Offline
Junior Poster in Training

Re: error C2446: '==' : no conversion from 'int' to 'char *'

  #9  
Jul 7th, 2008
Originally Posted by Duoas View Post
Ah, it is because seating is declared as a 2D array, but you are only indexing one dimension. Hence the error.

Did you mean to treat seating as a 1D array in your function? I'm not sure how you are trying to index the seating array in your function...

If I am reading it right (from just a quick glance over your code) it should be:

if(seating[openRow][openSeat + potential] == '#')

Hope this helps.


Thanks@! I hate when I spend so much time trying to fix code and it turns out to be something that should have been so obvious.

Thanks again
Reply With Quote  
Join Date: Oct 2007
Location: Cherry Hill, NJ
Posts: 1,876
Reputation: Duoas is a splendid one to behold Duoas is a splendid one to behold Duoas is a splendid one to behold Duoas is a splendid one to behold Duoas is a splendid one to behold Duoas is a splendid one to behold Duoas is a splendid one to behold 
Rep Power: 11
Solved Threads: 193
Featured Poster
Duoas's Avatar
Duoas Duoas is offline Offline
Posting Virtuoso

Re: error C2446: '==' : no conversion from 'int' to 'char *'

  #10  
Jul 7th, 2008
I know what you mean. When I was first learning C I spent three or four days once trying to figure out an error -- which turned out to be a missing } in an #included file...

An extra pair of eyes if always useful for these kinds of things.

Reply With Quote  
Reply

Only community members can participate in forum threads. You must register or log in to contribute.

DaniWeb C++ Marketplace
Currently Active Users Viewing This Thread: 1 (0 members and 1 guests)

 

Thread Tools Display Modes

Similar Threads
Other Threads in the C++ Forum

All times are GMT -4. The time now is 7:21 pm.
Forum system based on vBulletin Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
©2003 - 2008 DaniWeb® LLC