473,796 Members | 2,728 Online
Bytes | Software Development & Data Engineering Community
+ Post

Home Posts Topics Members FAQ

Use a class as a variable type in another class / include file.

Hello. I am quite new to the c++ language, and am still trying to
learn it. I recently discovered how using include files would allow me
to split up my code into smaller segments, instead of having class
definitions etc. in one big file (yay, major discovery...).

My problem is this:

When I define a class in one include file, and then try to instantiate
it in another, I get compile-time errors saying the type is invalid.
If i move the class definition of the class which instantiates the
other class into the main .cpp-file i get no errors.

How to solve this problem? I would like to have each class in seperate
include files, but still be able to instantiate them inside each
other.

I am using Microsoft Visual C++ 6.0 on Windows XP.

-Toke
Jul 22 '05 #1
10 2541
"Toke H?iland-J?rgensen" <to**@toke.dk > wrote...
Hello. I am quite new to the c++ language, and am still trying to
learn it. I recently discovered how using include files would allow me
to split up my code into smaller segments, instead of having class
definitions etc. in one big file (yay, major discovery...).

My problem is this:

When I define a class in one include file, and then try to instantiate
it in another, I get compile-time errors saying the type is invalid.
If i move the class definition of the class which instantiates the
other class into the main .cpp-file i get no errors.
Try including the header with the first class into the source code
with the other class:

#include "myheader.h "

How to solve this problem? I would like to have each class in seperate
include files, but still be able to instantiate them inside each
other.


Also, see "forward declaration", it might be relevant, but hard to
tell without the code.

Victor
Jul 22 '05 #2
"Toke H?iland-J?rgensen" <to**@toke.dk > wrote in message
news:59******** *************** ***@posting.goo gle.com...
Hello. I am quite new to the c++ language, and am still trying to
learn it. I recently discovered how using include files would allow me
to split up my code into smaller segments, instead of having class
definitions etc. in one big file (yay, major discovery...).

My problem is this:

When I define a class in one include file, and then try to instantiate
it in another, I get compile-time errors saying the type is invalid.
If i move the class definition of the class which instantiates the
other class into the main .cpp-file i get no errors.

How to solve this problem? I would like to have each class in seperate
include files, but still be able to instantiate them inside each
other.

I am using Microsoft Visual C++ 6.0 on Windows XP.

-Toke


I would suggest something like this:

// main.cpp
#include "myclass.h"
int main() {// make use of myclass here}
// end of file

in one file,

// myclass.h
#if !defined MYCLASS_H
#define MYCLASS_H
class CoolClass
{
public:
CoolClass();
void amethod();
// other stuff
};
#endif // end of file

and finally

// myclass.cpp
#include "myclass.h"
CoolClass::Cool Class()
{
// define constructor here
}
void CoolClass::amet hod()
{
// define amethod here
}
// end of file

main.cpp and myclass.cpp would be compiled into your project and myclass.h
put into your include path.

--
Cy
http://home.rochester.rr.com/cyhome/
Jul 22 '05 #3
"Cy Edmunds" <ce******@spaml ess.rochester.r r.com> wrote in message news:<6A******* ************@tw ister.nyroc.rr. com>...

I would suggest something like this:
<snip>
main.cpp and myclass.cpp would be compiled into your project and myclass.h
put into your include path.
This is the structure I have been able to put together myself, and it
works fine, just like you suggested. My problem is using myclass in
another include file, e.g. myotherclass.cp p

building on your structure: // main.cpp
#include "myclass.h"
int main() {// make use of myclass here}
// end of file

in one file,

// myclass.h
#if !defined MYCLASS_H
#define MYCLASS_H
class CoolClass
{
public:
CoolClass();
void amethod();
// other stuff
};
#endif // end of file

and finally

// myclass.cpp
#include "myclass.h"
CoolClass::Cool Class()
{
// define constructor here
}
void CoolClass::amet hod()
{
// define amethod here
}
// end of file


another class:

//myotherclass.h
#if !defined MYOTHERCLASS_H
#define MYOTHERCLASS_H
class QuiteCoolClass
{
public:
QuiteCoolClass( );
void amethod();
// other stuff
};
#endif // end of file

//myotherclass.cp p

#include "myotherclass.h "
QuiteCoolClass: :QuiteCoolClass ()
{
// define constructor here
}
void QuiteCoolClass: :amethod()
{
CoolClass coolClassInstan ce; //this is where the error is
coolClassInstan ce.amethod(); //this doesn't work either
// define amethod here
}
// end of file

I get compile time errors when trying to do the above, whereas
instantiating CoolClass in main() gives me no problems whatsoever,
i.e. if I move the code from myotherclass.h and myotherclass.cp p into
main.ccp, i get no errors.

I hope this clarifies my problem a little... :)

-Toke
Jul 22 '05 #4
"Victor Bazarov" <v.********@com Acast.net> wrote in message news:<r55Ib.724 45$VB2.142131@a ttbi_s51>...
the
Try including the header with the first class into the source code
with the other class:

#include "myheader.h "
I tried that to no avail...
Also, see "forward declaration", it might be relevant, but hard to
tell without the code.


I googled and found this document about forward declarations:
http://www.adp-gmbh.ch/cpp/forward_decl.html
I (think) i did what it suggests, but that didn't help either.

Would it help if I posted the sourcecode of the offending files here?

-Toke
Jul 22 '05 #5
"Toke H?iland-J?rgensen" <to**@toke.dk > wrote...
"Victor Bazarov" <v.********@com Acast.net> wrote in message news:<r55Ib.724 45$VB2.142131@a ttbi_s51>... the
Try including the header with the first class into the source code
with the other class:

#include "myheader.h "


I tried that to no avail...
Also, see "forward declaration", it might be relevant, but hard to
tell without the code.


I googled and found this document about forward declarations:
http://www.adp-gmbh.ch/cpp/forward_decl.html
I (think) i did what it suggests, but that didn't help either.

Would it help if I posted the sourcecode of the offending files here?


Most certainly, yes. However, don't attach it, copy-and-paste it. Also,
remove all non-essential parts of the code and make sure that after that
it still compiles with exactly the same error message as you claim it does.

V
Jul 22 '05 #6
"Victor Bazarov" <v.********@com Acast.net> wrote in message news:<EPqIb.114 90$I07.23677@at tbi_s53>...
Most certainly, yes. However, don't attach it, copy-and-paste it. Also,
remove all non-essential parts of the code and make sure that after that
it still compiles with exactly the same error message as you claim it does.


Okay...the program is an attempt at making a text adventure as an
excercise...

//adventure.cpp
#include <iostream.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <fstream.h>
#include <windows.h>

const int WEAPON = 100;
const int ARMOR = 101;
const int CHARM = 102;
const int TEXTMODE = 200;
const int BINARYMODE = 201;
const int NUMRANDOMS = 10000;
const int EAST = 1;
const int WEST = 2;
const int NORTH = 3;
const int SOUTH = 4;

#include "random.h"
#include "DataHandle r.h"
#include "TreasureChest. h"

using namespace adventure;

RandomHandler randomBase;

TreasureChest treasureChest;

int main()
{
return 0;
}

//random.h

#ifndef __random_h__

#define __random_h__

namespace adventure
{
const int NUMRANDOMS = 10000;

//
// RandomHandler class
// used to store a bunch of randoms...used as a workaround
//

class RandomHandler
{
int randoms[NUMRANDOMS];
int randomCounter;

public:
RandomHandler() ;
int GetRandom();
};

}
#endif
//random.cpp
#include "random.h"
#include <stdlib.h>
#include <time.h>
namespace adventure
{

RandomHandler:: RandomHandler()
{
int i;
srand( (unsigned)time( NULL ) );

for( i = 0; i < NUMRANDOMS; i++ )
randoms[i] = rand();

randomCounter = 0;
}

int RandomHandler:: GetRandom()
{
randomCounter++ ;
if(randomCounte r >= NUMRANDOMS)
randomCounter = 0;

return randoms[randomCounter];
}
}

//DataHandler.h / DataHandler.cpp defines the class DataHandler
//They work fine, however, so i excluded them...

//TreasureChest.h
#ifndef __TreasureChest _h__
#define __TreasureChest _h__

#include "DataHandle r.h"

namespace adventure
{
class DataHandler;
class RandomHandler;

//
// Treasure struct.
// Contains information about treasure.
//
struct Treasure {
char name [50];
int isWearable;
int gold, hBonus, sBonus, aBonus;
char type;
int attackModifier, defenceModifier ;
};

//
// TreasureChest class
// Manages treasures.
//
class TreasureChest
{
Treasure * treasures;
Treasure emptyTreasure;
int numTreasures;
void AddTreasure(Tre asure);
void LoadTreasures() ;

public:
TreasureChest() ;
Treasure GetTreasure(int );
};
}

#endif

//TreasureChest.c pp
#include "TreasureChest. h"
#include "DataHandle r.h"
#include <string.h>
#include <stdlib.h>
namespace adventure
{

const int TEXTMODE = 200;
const int BINARYMODE = 201;

TreasureChest:: TreasureChest()
{
numTreasures = 0;
treasures = new Treasure[1];
strcpy(emptyTre asure.name, "No treasure");
LoadTreasures() ;
}

void TreasureChest:: AddTreasure(Tre asure add)
{

treasures = (Treasure *) realloc(treasur es, (numTreasures+1 ) *
sizeof(Treasure ));
treasures[numTreasures] = add;
numTreasures++;
}

void TreasureChest:: LoadTreasures()
{
char input[100] = "";
Treasure thisTreasure;
DataHandler treasureGet ("treasure.txt" ,TEXTMODE);

while(treasureG et.GetLine(inpu t) != false) {
if(input[0] != '#') {
strcpy(thisTrea sure.name,strto k(input, ";"));
thisTreasure.is Wearable = atoi(strtok(NUL L, ";"));
thisTreasure.ty pe = atoi(strtok(NUL L, ";"));
thisTreasure.go ld = atoi(strtok(NUL L, ";"));
thisTreasure.hB onus = atoi(strtok(NUL L, ";"));
thisTreasure.sB onus = atoi(strtok(NUL L, ";"));
thisTreasure.aB onus = atoi(strtok(NUL L, ";"));
thisTreasure.at tackModifier = atoi(strtok(NUL L, ";"));
thisTreasure.de fenceModifier = atoi(strtok(NUL L, ";"));

AddTreasure(thi sTreasure);
}
}

}

Treasure TreasureChest:: GetTreasure(int type)
{
int t;
double r;

do {
r = ( (double) randomBase.GetR andom() / (double)(RAND_M AX+1) );
//class instantiated in adventure.cpp - problem
t = (int) (r * numTreasures);
} while(treasures[t].type != type);
return treasures[t];
}

}
The compiler errors:
--------------------Configuration: adventure - Win32
Debug--------------------
Compiling...
TreasureChest.c pp
d:\dokumenter\c oding\adventure \treasurechest. cpp(60) : error C2065:
'randomBase' : undeclared identifier
d:\dokumenter\c oding\adventure \treasurechest. cpp(60) : error C2228:
left of '.GetRandom' must have class/struct/union type
adventure.cpp
DataHandler.cpp
Error executing cl.exe.

adventure.exe - 2 error(s), 0 warning(s)

I put in comments where the errors are. Hope this helps... :)

-Toke
Jul 22 '05 #7

"Toke H?iland-J?rgensen" <to**@toke.dk > wrote in message news:59******** *************** ***@posting.goo gle.com...
#include <iostream.h>
#include <fstream.h>
Get in the habit of using standard constructs. The include files are <iostream> and <fstream>.

const int WEAPON = 100;
const int ARMOR = 101;
const int CHARM = 102;
const int TEXTMODE = 200;
const int BINARYMODE = 201;
const int NUMRANDOMS = 10000;
const int EAST = 1;
const int WEST = 2;
const int NORTH = 3;
const int SOUTH = 4;
You might consider grouping these into enums for convenience:
enum Item { WEAPON, ARMOR, CHARM };
enum Direction { EAST, WEST, NORTH, SOUTH } ; .
etc..
#ifndef __random_h__

#define __random_h__
Do not use symbols like this in your program. They are reserved for the compiler
implementors.

#ifndef INCLUDE_RANDOM_ H
#define INCLUDE_RANDOM_ H
strcpy(thisTrea sure.name,strto k(input, ";"));
thisTreasure.is Wearable = atoi(strtok(NUL L, ";"));
strtok and atoi are both evil functions. atoi exhibits undefined behavior if
you give it data outside the range. strtok is a piece of crap that has no
business ever getting standardized. You do know that it writes over
the input string (in addition to storing internal state).

I'm not clear why you just didn't use a strea and formatted I/O here. It
would have been much easier.
r = ( (double) randomBase.GetR andom() / (double)(RAND_M AX+1) );
//class instantiated in adventure.cpp - proble


Because randomBase hasn't been seen in this file. You define it in main and there's no
declaration for it elsewhere. You probably want to put
extern RandomHandler randomBase
in one of the include files.
Jul 22 '05 #8
"Toke H?iland-J?rgensen" <to**@toke.dk > wrote in message
news:59******** *************** ***@posting.goo gle.com...
"Victor Bazarov" <v.********@com Acast.net> wrote in message news:<EPqIb.114 90$I07.23677@at tbi_s53>...
Most certainly, yes. However, don't attach it, copy-and-paste it. Also, remove all non-essential parts of the code and make sure that after that
it still compiles with exactly the same error message as you claim it

does.
Okay...the program is an attempt at making a text adventure as an
excercise...

//adventure.cpp
#include <iostream.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <fstream.h>
#include <windows.h>

const int WEAPON = 100;
const int ARMOR = 101;
const int CHARM = 102;
const int TEXTMODE = 200;
const int BINARYMODE = 201;
const int NUMRANDOMS = 10000;
const int EAST = 1;
const int WEST = 2;
const int NORTH = 3;
const int SOUTH = 4;

#include "random.h"
#include "DataHandle r.h"
#include "TreasureChest. h"

using namespace adventure;

RandomHandler randomBase;

TreasureChest treasureChest;

int main()
{
return 0;
This looks like kind of a short adventure. :)
}

//random.h

#ifndef __random_h__

#define __random_h__

namespace adventure
{
const int NUMRANDOMS = 10000;

//
// RandomHandler class
// used to store a bunch of randoms...used as a workaround
//

class RandomHandler
{
int randoms[NUMRANDOMS];
int randomCounter;

public:
RandomHandler() ;
int GetRandom();
};

}
#endif
//random.cpp
#include "random.h"
#include <stdlib.h>
#include <time.h>
namespace adventure
{

RandomHandler:: RandomHandler()
{
int i;
srand( (unsigned)time( NULL ) );

for( i = 0; i < NUMRANDOMS; i++ )
randoms[i] = rand();

randomCounter = 0;
}

int RandomHandler:: GetRandom()
{
randomCounter++ ;
if(randomCounte r >= NUMRANDOMS)
randomCounter = 0;

return randoms[randomCounter];
}
}

//DataHandler.h / DataHandler.cpp defines the class DataHandler
//They work fine, however, so i excluded them...

//TreasureChest.h
#ifndef __TreasureChest _h__
#define __TreasureChest _h__

#include "DataHandle r.h"

namespace adventure
{
class DataHandler;
class RandomHandler;

//
// Treasure struct.
// Contains information about treasure.
//
struct Treasure {
char name [50];
int isWearable;
int gold, hBonus, sBonus, aBonus;
char type;
int attackModifier, defenceModifier ;
};

//
// TreasureChest class
// Manages treasures.
//
class TreasureChest
{
Treasure * treasures;
Treasure emptyTreasure;
int numTreasures;
void AddTreasure(Tre asure);
void LoadTreasures() ;

public:
TreasureChest() ;
Treasure GetTreasure(int );
};
}

#endif

//TreasureChest.c pp
#include "TreasureChest. h"
#include "DataHandle r.h"
#include <string.h>
#include <stdlib.h>
namespace adventure
{

const int TEXTMODE = 200;
const int BINARYMODE = 201;

TreasureChest:: TreasureChest()
{
numTreasures = 0;
treasures = new Treasure[1];
strcpy(emptyTre asure.name, "No treasure");
LoadTreasures() ;
}

void TreasureChest:: AddTreasure(Tre asure add)
{

treasures = (Treasure *) realloc(treasur es, (numTreasures+1 ) *
sizeof(Treasure ));
treasures[numTreasures] = add;
numTreasures++;
}

void TreasureChest:: LoadTreasures()
{
char input[100] = "";
Treasure thisTreasure;
DataHandler treasureGet ("treasure.txt" ,TEXTMODE);

while(treasureG et.GetLine(inpu t) != false) {
if(input[0] != '#') {
strcpy(thisTrea sure.name,strto k(input, ";"));
thisTreasure.is Wearable = atoi(strtok(NUL L, ";"));
thisTreasure.ty pe = atoi(strtok(NUL L, ";"));
thisTreasure.go ld = atoi(strtok(NUL L, ";"));
thisTreasure.hB onus = atoi(strtok(NUL L, ";"));
thisTreasure.sB onus = atoi(strtok(NUL L, ";"));
thisTreasure.aB onus = atoi(strtok(NUL L, ";"));
thisTreasure.at tackModifier = atoi(strtok(NUL L, ";"));
thisTreasure.de fenceModifier = atoi(strtok(NUL L, ";"));

AddTreasure(thi sTreasure);
}
}

}

Treasure TreasureChest:: GetTreasure(int type)
{
int t;
double r;

do {
r = ( (double) randomBase.GetR andom() / (double)(RAND_M AX+1) );
//class instantiated in adventure.cpp - problem
t = (int) (r * numTreasures);
} while(treasures[t].type != type);
return treasures[t];
}

}
The compiler errors:
--------------------Configuration: adventure - Win32
Debug--------------------
Compiling...
TreasureChest.c pp
d:\dokumenter\c oding\adventure \treasurechest. cpp(60) : error C2065:
'randomBase' : undeclared identifier
d:\dokumenter\c oding\adventure \treasurechest. cpp(60) : error C2228:
left of '.GetRandom' must have class/struct/union type
adventure.cpp
DataHandler.cpp
Error executing cl.exe.

adventure.exe - 2 error(s), 0 warning(s)

I put in comments where the errors are. Hope this helps... :)

-Toke


OK, randomBase is a global variable defined in adventure.cpp. Then you try
to use it in TreasureChest.c pp. Since that symbol isn't defined in that
file, the compiler says, "undeclared identifier". That makes sense. The
other error is spurious, trying to keep going without knowing what
randomBase means.

So how to fix it? You could declare randomBase external, but that would be a
poor idea. I suggest you avoid global variables as much as possible. In this
case I would suggest randomBase be declared in your main function and passed
as an argument as needed; e.g.

Treasure TreasureChest:: GetTreasure(int type, RandomHandler &randomBase)

--
Cy
http://home.rochester.rr.com/cyhome/
Jul 22 '05 #9
"Cy Edmunds" <ce******@spaml ess.rochester.r r.com> wrote in message news:<SA******* ************@tw ister.nyroc.rr. com>...
So how to fix it? You could declare randomBase external, but that would be a
poor idea. I suggest you avoid global variables as much as possible. In this
case I would suggest randomBase be declared in your main function and passed
as an argument as needed; e.g.

Treasure TreasureChest:: GetTreasure(int type, RandomHandler &randomBase)


Ok, I will change my code to pass the global variables around as you
suggested. It makes sense to do so instead of using global variables.
Thanks alot for your help... :)

-Toke
Jul 22 '05 #10

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

Similar topics

5
2149
by: xuatla | last post by:
Hi, I encountered the following compile error of c++ and hope to get your help. test2.cpp: In member function `CTest CTest::operator+=(CTest&)': test2.cpp:79: error: no match for 'operator=' in '*this = CTest::operator+(CTest&)((+t2))' test2.cpp:49: error: candidates are: CTest CTest::operator=(CTest&) make: *** Error 1
5
3025
by: news | last post by:
Well, I wrote my first PHP class today. Yeah! But to get it to work, in each function within the class I have to repeat the database connection lines, and that just seems redundant; there has to be a better way that I'm just not bright enough to think of. Any suggestions? (It's the first 3 lines of each of the two functions below. When I have it fully written, there will be about 10 similar functions, each repeating those three lines.)
5
3796
by: meyousikmann | last post by:
Given these two (incomplete but representative) classes in two seperate header files: Class1.h class Class1 { public: Class(const char CharValue, const int IntValue1, const int IntValue2); ~City();
5
8733
by: Chris | last post by:
Hi, I don't get the difference between a struct and a class ! ok, I know that a struct is a value type, the other a reference type, I understand the technical differences between both, but conceptually speaking : when do I define something as 'struct' and when as 'class' ? for example : if I want to represent a 'Time' thing, containing : - data members : hours, mins, secs
17
1581
by: Amchi | last post by:
Alright .... this makes no sense ... Declared a class 'diskStorage' in a header ...diskStorage.h Defined it's contructor and methods ... in diskStorage.cpp Included diskStorage header in a another class ...(server.h) and then tried to declare a variable of type 'diskStorage' ... like this ( inside server.h ) diskStorage local_disk;
25
2150
by: David Sanders | last post by:
Hi, As part of a simulation program, I have several different model classes, ModelAA, ModelBB, etc., which are all derived from the class BasicModel by inheritance. model to use, for example if the parameter model_name is "aa", then choose ModelAA. Currently I do this as follows:
3
2314
by: Stephen Torri | last post by:
Below is a class that is suppose to represent a segment of memory or a contents of a binary image (e.g. ELF executable). I have started to read Modern C++ Design and thought the best way to ensure I was understanding the chapter on policy classes was to attempt to apply them to my project. I understand the general concept of policies but I lack the knowledge and wisdom of how to identify them in an existing project. So I figured to get an...
20
4046
by: tshad | last post by:
Using VS 2003, I am trying to take a class that I created to create new variable types to handle nulls and track changes to standard variable types. This is for use with database variables. This tells me if a variable has changed, give me the original and current value, and whether the current value and original value is/was null or not. This one works fine but is recreating the same methods over and over for each variable type. ...
11
8338
by: Jef Driesen | last post by:
I have the following problem in a C project (but that also needs to compile with a C++ compiler). I'm using a virtual function table, that looks like this in the header file: typedef struct device_t { const device_backend_t *backend; ... } device_t; typedef struct device_backend_t {
0
9685
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, people are often confused as to whether an ONU can Work As a Router. In this blog post, we’ll explore What is ONU, What Is Router, ONU & Router’s main usage, and What is the difference between ONU and Router. Let’s take a closer look ! Part I. Meaning of...
0
9535
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 effortlessly switch the default language on Windows 10 without reinstalling. I'll walk you through it. First, let's disable language synchronization. With a Microsoft account, language settings sync across devices. To prevent any complications,...
0
10467
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, it seems that the internal comparison operator "<=>" tries to promote arguments from unsigned to signed. This is as boiled down as I can make it. Here is my compilation command: g++-12 -std=c++20 -Wnarrowing bit_field.cpp Here is the code in...
0
10021
tracyyun
by: tracyyun | last post by:
Dear forum friends, With the development of smart home technology, a variety of wireless communication protocols have appeared on the market, such as Zigbee, Z-Wave, Wi-Fi, Bluetooth, etc. Each protocol has its own unique characteristics and advantages, but as a user who is planning to build a smart home system, I am a bit confused by the choice of these technologies. I'm particularly interested in Zigbee because I've heard it does some...
1
7558
isladogs
by: isladogs | last post by:
The next Access Europe User Group meeting will be on Wednesday 1 May 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM). In this session, we are pleased to welcome a new presenter, Adolph Dupré who will be discussing some powerful techniques for using class modules. He will explain when you may want to use classes instead of User Defined Types (UDT). For example, to manage the data in unbound forms. Adolph will...
0
6802
by: conductexam | last post by:
I have .net C# application in which I am extracting data from word file and save it in database particularly. To store word all data as it is I am converting the whole word file firstly in HTML and then checking html paragraph one by one. At the time of converting from word file to html my equations which are in the word document file was convert into image. Globals.ThisAddIn.Application.ActiveDocument.Select();...
0
5582
by: adsilva | last post by:
A Windows Forms form does not have the event Unload, like VB6. What one acts like?
2
3744
muto222
by: muto222 | last post by:
How can i add a mobile payment intergratation into php mysql website.
3
2931
bsmnconsultancy
by: bsmnconsultancy | last post by:
In today's digital era, a well-designed website is crucial for businesses looking to succeed. Whether you're a small business owner or a large corporation in Toronto, having a strong online presence can significantly impact your brand's success. BSMN Consultancy, a leader in Website Development in Toronto offers valuable insights into creating effective websites that not only look great but also perform exceptionally well. In this comprehensive...

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.