Strange visual studio 2008 C++ compiler error - c++

I have three lines of code:
//int pi;
activation->structSize = sizeof(rmsActivationT);
int pi; //program wont compile with this here
every time I uncomment the second int pi and comment the first int pi I get this error: syntax error : missing ';' before 'type'. When i uncomment this first int pi and comment the second int pi, my compiler doesn't complain anymore. This error has been bothering me for almost a full day now any ideas would be great.
Thanks
Visual studios 2008
Windows XP 32 bit

Are you, perhaps, compiling the code as C instead of C++? C (prior to C99, which Visual Studio doesn't support) required that all definitions in a block precede any other statements.

I had the same problem.
The compilation errors were:
*main.cpp(325): error C2601: 'FLAG' : local function definitions are illegal
main.cpp(323): this line contains a '{' which has not yet been matched
main.cpp(326): fatal error C1075: end of file found before the left brace '{' at 'main.cpp(323)' was matched*
But there was nothing wrong with my code. I counted all brackets and the number matched. There weren't any function inside another function.
I solved it by removing all "//" comments from the source code. It seems that the reason for that is bad line formatting which causes the compiler to miss a line break, so the line after a comment is treated as a comment as well.
For example:
// This is a comment
This_is_a_line;
is treated as:
// This is a comment This_is_a_line;

Related

Setting to improve Visual Studio inscrutable compile/build error: MSB6006: "CL.exe" exit code 2

I recently (finally!) upgraded to VS2019 from VS2008 and I ran across a ridiculous error that I had never seen before - MSB6006: "CL.exe" exit code 2.
After some searching, Microsoft suggested a screwed up Path variable. Nope!
And then a lot of other people on the interweb had the same error for screwy and seemingly unrelated reasons.
I finally found the problem by disabling sections of my code one-at-a-time. It turned out I forgot to return a value in a non-void function.
It was something like this:
class myClass{
int classMember;
....
int memberFunc(int input){
int out = input * classMember;
//should have returned 'out' here but I didn't.
}
};
My two questions are:
1) What in the HOLY **** happened to the nice, user friendly compiler error in VS2008 that used to tell me I had forgotten to return a value? (not that -ahem- I do that very often.)
2) Is there a way to get the nice error message back? Some setting buried somewhere? Perhaps even some sort of default configuration VS2019 is using for my projects that I can dumb-down?
And next, here's a thought for any others who are beating their heads against the MSB6006 wall: The fact that I got this opaque build error when VS2019 SHOULD have caught a very simple and explainable compile-time error implies that others may be seeing it for similar reasons - that is, something simple that you would normally expect the compiler to catch for you isn't being caught... Systematically disabling sections of code worked for me.

Using for_each_process() in my program prevents me from compiling, compiler says semicolon expected?

I'm trying to write a very simple piece of code for a class, but I'm just stumped as to why I can't compile it. Sorry if this is a duplicate or silly question, but I couldn't find any others that answered this for me. My full program is pasted below. When I try to compile, I get the following error:
test.c: In function 'main':
test.c:7:27: error: expected ';' before '{' token
Here's the code:
#include<stdio.h>
#include<linux/sched.h>
#include<linux/kernel.h>
int main(){
struct task_struct *task;
for_each_process(task){
printf("I found task: %d\n", task->pid);
}
return 0;
}
I feel like I'm missing something painfully obvious, can anyone point out what the problem is here? I've tried initializing the 'task' object as NULL and using a simpler printf statement that just prints 'test', but nothing I've tried has fixed this compilation error.
The macro has been moved to <linux/sched/signal.h> in this commit c3edc4010e9d102eb7b8f17d15c2ebc425fed63c in 2017. (https://github.com/torvalds/linux/commit/c3edc4010e9d102eb7b8f17d15c2ebc425fed63c).
(For someone who has trouble in compiling for this reason.)
The preprocessor token you are using for_each_process is either not defined, or not defined to do what you think it does.
Every C++ compiler I've used can be told to dump the post-preprocessing output. If you pass the flag that makes this happen when building your source file, you'll see the code that the compiler is seeing and screwing up on.
gcc -E clang -E or the /E flag in visual studio (heh) for example.
As #Ulrich has mentioned above, apparently that macro is only available within the kernel. Attempting to read <linux/sched.h> directly and determine this is challenging, as there are many, many ifdef/endif pairs.

Eclipse CDT does not correctly parse 'unsigned int myVar;'

I encounter strange problem with Eclipse CDT Helios under Ubuntu
The screen shot is here http://imgur.com/0saop
int MiniMsg::parseChecksum() {
unsigned int dint; // this if flagged as syntax error by Eclipse only!!
uint32_t d32;
return parseItem(chkStart, chkEnd, checksum);
}
The definition of 'dint' is not recognized and flagged as syntax error.
Actually any definition of the form 'signed/unsigned type var' is not recognized...
Any ideas?
Usually a yellow squiggly means a compiler warning, and guessing by the fact that that variable is never used, it is probably complaining about that.
The warning would be something along the lines of:
foo.c:3: warning: 'unsigned int dint' defined but not used

Unable to reference variables... Why?

I have a very simple bit of code that won't work, and have no idea why
The following:
int flag = 0;
if (flag == 0)
{
flag = 1;
}
Will not compile. It is already a quite complex program, and I am able to do other actions within the program with no problems at all, yet for some reason I can't reference a variable I have just created. The variable name is unique, and the application is a Windows app including windows.h. It is written in C, and up until now I have not attempted to create my own variables.
I can't publish the full code here, least of all because there's pages of it, but can anyone speculate as to why it can't compile? I am using Visual C++ and have the following errors:
syntax error : missing ';' before 'type' (this applies to line 1)
'flag' : undeclared identifier (line 2)
'flag' : undeclared identifier (line 4)
I have tried using bool as well, with 'true' and 'false' in place. I am relatively new to C++. Note that the code compiles fine without it here at all. It comes immediately after a previous action within a larger 'if' statement, of which this is a part. I have successfully added other nested if statements in the exact same place as this. Taking it outside the if statement entirely makes no difference. Putting it all right at the top of my main.c file, just after the #includes, makes no difference. Removing it completely means the program compiles absolutely fine. The problem seems to lie with defining the variable.
I assume you compile it to C language. You need to declare the variable at the beginning of the block:
// beginning of block
int flag=0;
//Some code
if (flag == 0)
{
flag = 1;
}
are you missing a ; at the end of the preceding line?
Looks to me, as if the line before the variable declaration has not been finished with a ;. Check this line for the missing semicolon.

Syntax error compiling header containing "char[]"

I am trying to build a Visual C++ 2008 DLL using SDL_Mixer 1.2:
http://www.libsdl.org/projects/SDL_mixer/
This is supposedly from a build made for Visual C++, but when I include SDL_mixer.h I get error C2143: "syntax error : missing ';' before '['".
The problem line is:
const char[] MIX_EFFECTSMAXSPEED = "MIX_EFFECTSMAXSPEED";
Is this because of the use of the dynamic array construct "char[]", instead of "char*"?
All the expressions in the file are wrapped by "extern "C" {".
move the square brackets after the variable name
const char MIX_EFFECTSMAXSPEED[] = "MIX_EFFECTSMAXSPEED";
You want:
const char MIX_EFFECTSMAXSPEED[] = "MIX_EFFECTSMAXSPEED";
Note that there is no "dynamic array construct" here - you have an array of char that is initialised witha string literal - all compile time things.
My bad. Although the answers here are correct regarding C construct, the actual problem was that I had included a "D" language file instead of the C version.