|
So I was bored and wanted to try out Code::Blocks and MinGW with something that I knew works so I got a copy of a console RPG that works and I typed it all out myself in a separate project. The original example program compiles perfectly and runs while mine throws errors that do not make any since. I deleted the examples project file, started a new one and imported the .cpp/.h files and it still compiles so I know its not a project config error.
#ifndef RANGE_H
#define RANGE_H
struct Range
{
int mLow;
int mHigh;
};
#endif
#ifndef RANDOM_H
#define RANDOM_H
#include "range.h"
int Random(Range r);
int Random(int a, int b);
#endif
||=== RPG, Debug ===|<br />
C:\Documents and Settings\Administrator\Desktop\RPG\RPG - ERR\random.h|6|error: new types may not be defined in a return type|<br />
C:\Documents and Settings\Administrator\Desktop\RPG\RPG - ERR\random.h|6|note: (perhaps a semicolon is missing after the definition of `Monster')|<br />
C:\Documents and Settings\Administrator\Desktop\RPG\RPG - ERR\random.h|6|error: two or more data types in declaration of `Random'|<br />
C:\Documents and Settings\Administrator\Desktop\RPG\RPG - ERR\random.h|6|error: extraneous `int' ignored|<br />
||=== Build finished: 3 errors, 0 warnings ===|<br />
The error does not make any since, I even copy paste the contents of the example project into mine and it trows the same errors. Can someone see whats wrong?
Both project can be downloaded off my 4shared: LINK
|
|
|
|
|
C:\Documents and Settings\Administrator\Desktop\RPG\RPG - ERR\random.h|6|note: (perhaps a semicolon is missing after the definition of `Monster')
Have you investigated this clue?
|
|
|
|
|
These situation are typical when a file is included after something else, that -in a same translation unit- doesn't close properly some scope.
The compiler is actually treating your declarations as if they are part of some other precedent not closed declaration (and thus messing everything around).
Try the following:
- Find the C++ file that includes your snippet (either directly or via #include )
- Look if there is some #include BEFORE the inclusion of this snippet.
- Look in that file:
- if {}[]() and <> are properly paired
- if after the '} ' that closes a declaration there is the '; ' (otherwise what follow is treated as declaration of a variable ...)
In some worst cases the error may be even two more #include back.
2 bugs found.
> recompile ...
65534 bugs found.
|
|
|
|
|
In the CPP file you're building with are you inclusing something like monster.h before random.h? If you are is there a structure or class in there called Monster which isn't terminated with a semi-colon?
Create a new cpp file, include random.h in it and try compiling it from the command line. That should show whether the file that's doing the including is the one that's got the error in it.
Cheers,
Ash
|
|
|
|
|
Currently I am using CTreePropSheetEx – an extended version of CTreePropSheet[^] to design a flow project with subtree structure.
I would like to update my interface so it doesn't look so dialog base. I like my UI to look like
Spywareblaster[^]
OR
Kaspersky Antivirus[^]
Pretty much majority security software interface these days.
1. Can it be done in MFC?
2. Since a lot of vendors have adopted this type of UI is there a standard library I can use?
3. Is the library free?I am aware that BCG, codejock, prof-UIS may help me but they are paid commercial software.
4. Is there a book or website that can point me in the right direction.
Right now I am clueless what term to search for.
|
|
|
|
|
Orion Star wrote: 1. Can it be done in MFC?
Most likely.
Orion Star wrote: 2. Since a lot of vendors have adopted this type of UI is there a standard library I can use?
What about CodeJock?
"One man's wage rise is another man's price increase." - Harold Wilson
"Fireproof doesn't mean the fire will never come. It means when the fire comes that you will be able to withstand it." - Michael Simmons
"Man who follows car will be exhausted." - Confucius
|
|
|
|
|
|
Hi experts
How can i read master file table?Can any one give me tutorial link or example code where i can find read master file table folder and file?
|
|
|
|
|
|
|
|
I got a program and I want to pass a message to the window procedure when an argument is passed during program execution.
How can I also check if their is another instance of my app running?
|
|
|
|
|
Fareed Rizkalla wrote: I got a program and I want to pass a message to the window procedure when an argument is passed during program execution.
You could use PostMessage[^] for that.
Fareed Rizkalla wrote: How can I also check if their is another instance of my app running?
See Avoiding multiple application instances[^].
Workout progress:
Current arm size: 14.4in
Desired arm size: 18in
Next Target: 15.4in by Dec 2010
Current training method: HIT
|
|
|
|
|
Use CallWindowProc if you have a pointer to a window procedure to call.
Use DefWindowProc if you want to call the default window procedure for a window.
For a dialog use DefDlgProc instead.
|
|
|
|
|
I want to swap two string
#include <stdio.h>
#include <string.h>
void swap(char *a1, char *a2)
{
char ch[20];
if (a1 != NULL || a2 != NULL)
{
strcpy(ch, a1);
strcpy(a1, a2);
strcpy(a2, ch);
}
else
return ;
}
int main()
{
char *a1 = "hello";
char *a2 = "world";
printf("Before the swap a1=%s, a2=%s", a1, a2);
swap(a1, a2);
printf("After the swap a1=%s, a2=%s", a1, a2);
return 0;
}
|
|
|
|
|
Remember what I said about the difference between pointers and arrays earlier? What's probably happening is that the arrays your pointers are pointing to are in a chunk of memory in the program's text section. This section is usually read only - you don't want programs modifying their own code as a rule.
The first strcpy will work okay - you're copying data from the text section to an array on the stack, which is read/write. when you do the second strcpy you're copying from the text section to another bit of the text section and BOOM says the operating system.
If you declare a1 and a2 as:
char a1[] = "hello";
char a2[] = "world";
it'll start working if I'm correct.
Another way of looking at it is...
char a[] = "Hello";
translates to:
- allocate enough memory on the stack to hold 6 characters
- copy "Hello\0" into the memory
while:
char *a = "Hello";
translates to:
- allocate enough memory on the stack to hold a pointer
- initialise the pointer with the address of the constant string "Hello" in the text section
Incidentally this being able to use a char * to point at a const block of characters initialised at compile time is a legacy of the original K&R C which didn't have things like const - it's one of the irritating bits of programming in C. Unfortunately you just have to get used to it.
Hope that helps,
Ash
|
|
|
|
|
thanks !
but I still have question why this can be run
#include <iostream.h>
#include <cstring>
void swap(char *,char *);
int main()
{char str1[20]="hello",str2[20]="how are you ";
char pt[20];
cout<<"str1"<<" "<<str1<<endl;
cout<<"str2"<<" "<<str2<<endl;
strcpy(pt,str1);
strcpy(str1,str2);
strcpy(str2,pt);
cout<<"str1"<<" "<<str1<<endl;
cout<<"str2"<<" "<<str2<<endl;
return 0;
}
|
|
|
|
|
That works because you're using arrays - you're saying "allocate 20 bytes on the stack and initialise it with this string." With the original version you were saying "Initialise this pointer to point at a chunk of read only memory."
The difference is where the data your swapping is in memory. Have a look at the address of your variables in a debugger. You'll probably see all three having similar addresses in the second version. In the first version the a1 and a2 will have similar addresses and a lot different to that of the swap temporary.
Cheers,
Ash
|
|
|
|
|
Read here.
"One man's wage rise is another man's price increase." - Harold Wilson
"Fireproof doesn't mean the fire will never come. It means when the fire comes that you will be able to withstand it." - Michael Simmons
"Man who follows car will be exhausted." - Confucius
|
|
|
|
|
Thanks for posting that, the piccies work far better than my text.
Ash
|
|
|
|
|
Use & with the * in swap.
char*& a1
|
|
|
|
|
Your problem seems to be obvious.You are not allowed to modify string contents if they are allocated like a1 and a2.You should probably change your code like that:
char a1[20];
strcpy(a1,"Hello");
char a2[20];
strcpy(a2,"world");
In addition there was almost the same thread recently.
Life is a stage and we are all actors!
|
|
|
|
|
wonderful!
I see, thanks in advance!
|
|
|
|
|
You don't need the explicit strcpy call, the compiler will generate the code to initialise the array properly if you just use:
char a[ 20 ] = "Hello";
Ash
|
|
|
|
|
There is another access violation waiting to happen in your swap function. None of the arguments in a call to strcpy can be null. You need to check for a1 != NULL && a2 != NULL .
Also, watch out for the buffer overruns you might encounter if a1 is longer than 19 characters, or the allocated buffers of a2 and a1 are of different sizes.
|
|
|
|