Why the compiler outputs the following error codes: C2143, C2238, C2501 - c++

C2143: syntax error : missing ';' before '<'
I might be quite rusty in C++ since I sincerely don't know the reason of such errors.
The code is actually quite simple. (VS2003)
#include <vector>
class store
{
public:
vector<int>storage;
};
int _tmain(int argc, _TCHAR* argv[])
{
return 0;
}

Because you need to add std:: in front of vector:
std::vector<int>storage;
The vector class is inside the std namespace.
Or just add
using namespace std;
which is highly NOT recommended, especially for header files.

Related

Strip pointer from void* for use in unique_ptr using statement?

I'm trying to compile a simple C++ program that uses some functions and datastructures from the Win32 API and Wincrypt:
#include <memory>
using std::unique_ptr;
#include <Windows.h>
#include <Wincrypt.h>
using CERTSTORE_ptr = unique_ptr<CERTSTORE, decltype(&:: CertCloseStore)>;
int main(int argc, char* argv[])
{
return 0;
}
When I attempt to compile it, I get errors at the using CERTSTORE_ptr ... line. The errors:
test.cpp(18): error C2873: 'CERTSTORE_ptr' : symbol cannot be used in a using-declaration
test\certstoreexporttest.cpp(18): error C2513: 'int' : no variable declared before '='
test\certstoreexporttest.cpp(18): error C2065: 'CERTSTORE' : undeclared identifier
...
The problem appears to be with CERTSTORE and HCERTSTORE, which is typedef'd as:
typedef void *HCERTSTORE;
How do I declare the using statement so I can enjoy the automatic cleanup? (I'm trying to avoid the __try\__finally).
Or is this simply the wrong approach and should be abandoned? (I'm ready to go back to __try\__finally so I can finish up this test program).

Compiler error with list<string>

I'm trying to create a list of strings, following the example here. This below gives me syntax errors:
private: list<string> images;
The errors (all on the line where the above declaration is):
syntax error : missing ';' before '<'
missing type specifier - int assumed. Note: C++ does not support default-int
unexpected token(s) preceding ';'
It's in a class with only a single constructor besides it, and it compiles fine without it. What am I doing wrong?
Did you #include both <list> and <string>? Also, did you import the names list and string from namespace std by writing either
using namespace std;
or
using std::list; using std::string;
The error you're getting is consistent with the names not being accessible, so this is my best guess.
EDIT: Since this is in a header file, you should not be using either of the above constructs (thanks to wilhelmtell for pointing out that this is a header file!). Instead, you should fully-qualify the names as
private: std::list<std::string> images;
This way the compiler knows exactly where to look for list and string.
You need to qualify the list and string types with their namespace.
Either type std::list<std::string> or add using namespace std; after the #include <string> and #include <list> directives.
A simple working program:
#include <list>
#include <string>
using namespace std;
int main ( int, char ** )
{
list<string> strings;
strings.push_back("1st string");
}

C++ class definition compile problems

Ive looked all over and I cant find anything relating to my problem. Im trying to write a class definition for a polygon class that basicly has a vector that holds pointers to a point. When I try to compile i keep geting the folllowing errors...
error C2143: syntax error : missing ';' before '<'
error C4430: missing type specifier - int assumed.
error C2238: unexpected token(s) preceding ';'
error C2061: syntax error : identifier 'vector'
error C2065: 'myPolygonPoints' : undeclared identifier
error C2065: 'points' : undeclared identifier
error C2065: 'myHasInstersection' : undeclared identifier
error C2660: 'Polygon::addSetOfPoints' : function does not take 1 arguments
Here is the code to the class
#include "Point.h"
#include <vector>
class Point;
class Polygon
{
private:
vector<Point*> myPolygonPoints;
bool myHasIntersection;
public:
void addSetOfPoints(vector<Point*> points)
{
myPolygonPoints = points;
}
bool getHasIntersection()
{
return myHasIntersection;
}
void setHasIntersection(bool intersection)
{
myHasInstersection = intersection;
}
};
You are using vector from the std namespace without qualifying it.
You either have to do using namespace std;, or using std::vector, or declaring all your vector objects with the std namespace like std::vector.
#include "Point.h"
#include <vector>
class Point; // Assuming Point.h has this declared,
// you don't need this forward declaration, but in reality,
// you don't need to include Point.h
// since you're only declaring pointers to Points
class Polygon
{
private:
std::vector<Point*> myPolygonPoints;
bool myHasIntersection;
public:
void addSetOfPoints(std::vector<Point*> points)
{
myPolygonPoints = points;
}
bool getHasIntersection()
{
return myHasIntersection;
}
void setHasIntersection(bool intersection)
{
myHasInstersection = intersection;
}
};
vector is in the std:: namespace. so vector is undefined in your example code
Two possible solutions:
#include <vector>
using std::vector;
or: (in all cases through the code where you reference vector, both declaration and reference)
private:
std::vector<Point*> myPolygonPoints;
public:
void addSetOfPoints(std::vector<Point*> points)
etc.
A third solution is the following:
#include <vector>
using namespace std;
This last one, from a coding style perspective, I find less preferred. The reason is that it imports absolutely everything in the std namespace into the default namespace. By contrast, I find it preferrable to explicitly import the pieces I'm using, becuase it allows me to keep track of why I need a header. This doesn't make a sense in this case (of course I need <Vector>, I'm using std::vectors). It's much more relevant in a case like this:
#include <algorithm>
using std::adjacent_find;
Oh yeah, that's why I included that...
If you're not explicitly declaring that you're using the std namespace you should reference which namespace vector belongs to.
Besides the std::vector problem, you have also mispelled the myHasIntersection variable in the setHasIntersection method.

C++ can't create vector

This is weird. I created a vector just fine in one class but can't create it in another class. He's a representation of what I have:
main.h
#include <Windows.h>
#include <ShellAPI.h>
#include <vector>
#include <string>
#include <iostream>
#include "taco.h"
class MyClass
{
public:
int someint;
vector<int> myOrder;
};
taco.h
#include <vector>
class OtherClass
{
public:
vector<int> otherOrder;
};
And I get compile errors regarding the vector declaration in taco.h:
error C2143: syntax error : missing ';' before '<'
error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
error C2238: unexpected token(s) preceding ';'
What am I missing here? I can uncomment out that second vector declaration and it compiles fine.
Try:
std::vector<int> otherOrder;
vector is part of the std namespace. This means that whenever you use a vector in a header file, you should include the std:: prefix.
The reason that you can sometimes get away with forgetting it is that some included files may have using namespace std; in them, allowing you to leave off the prefix. However, you should avoid the using keyword in header files, for it will pollute the namespace of any files that include it.
For a more detailed explanation of the dangers of using namespace ..., see this thread.
Try std::vector<int>. You're supposed to use the namespace --- I'm assuming you have
using namespace std;
in the main.h someplace. There's a lot of talk on SO as to why using using is bad practice ; I'd recommend that you check it out.
All C++ standard library objects live in the std namespace. Try
class MyClass
{
public:
int someint;
std::vector<int> myOrder;
// ^^^^^
};
std::vector<int> ?

compiling error with vector in c++

I'm stuck! I have this very simple test code and I can't get it to compile! I have used the same code many times before but now it won't work!
I have this simple program
#include <vector>
#include <iostream>
#include "Rswap.h"
using namespace std;
int main(){
Rswap test();
cin.get();
return 0;}
And then the rswap.cpp...
#include <vector>
#include "Rswap.h"
Rswap::Rswap(){
V.push_back(9);
};
And then the rswap.h...
#ifndef Rswap_h
#define Rswap_h
class Rswap{
public:
vector<int>V;
Rswap();
};
#endif
I'm using Visual studio 2008. Is there something wrong that is obvious and I'm missing or what could it be! As I said I have used this snippet on several differnet occassions and I can't find any difference between this and those that work...
And i have tried both
vector < int > V; and vector <int> V; without any luck
I have stared at this blindly now for some while so I thought it's better to ask here!
rswap.h(7) : error C2143: syntax error : missing ';' before '<'
rswap.h(7) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
rswap.h(7) : error C2238: unexpected token(s) preceding ';'
At the point you #include "Rswap.h", you haven't declared using namespace std; yet, so the reference to vector in Rswap.h must be qualified with a namespace. Simply declare the vector with a namespace prefix.
class Rswap{
public:
std::vector<int>V;
Rswap();
};
Also, I suggest you #include <vector> from Rswap.h rather than relying on whoever uses Rswap.h to get the #include order right.
It should be
std::vector<int>V;
Ah, your using namespace std comes too late - it should be inserted BEFORE the rswap.h include. In any case, it's MUCH better to write std::vector instead.
You need to #include <vector> in rswap.h.