C++ :: Declare Static Variables In Header File
Oct 15, 2013I read in another forum that it is bad practice to declare static variables in a header file? Is that true and if so why.
View 1 RepliesI read in another forum that it is bad practice to declare static variables in a header file? Is that true and if so why.
View 1 Replieslets say we have a valid class with full implementation, X. can this class be declared as forward in Y header file:
Code: class X;
class Y{
X* m_X;
}
but still be used as regular in the cpp file?
Code:
#include "Y.h"
#incldue "X.h"
T Y::function(){
m_X->doSomething();
}
visual studio prevents me from doing it , I wonder if the standard also says so.
I'm trying to split up my game (about 1300 lines) into header files, but I'm coming up with a problem whenever I try and put a function in a header file, when that function was modifying some variables that were defined before int main in the .cpp. For example:
int variable1 (0);
int variable2 (0);
void increasevariables() {
variable 1 = variable1 + 1;
variable2 = variable2 + 1;
[code].....
If it only modified one variable then I could just pass that variable and the return it:(return variable1 + 1;)But I don't know how to make a function in a header file modify several pre-existing variables. In the actual program, the variables are dependant on each other and the modifying is a lot more complicated, so I'd rather not split it into several functions and run one at a time if there's another way.
I declared 3 private variables in header file.
I try to access one of the variable in its corresponding cpp file but I get an error message saying it's undefined. I did #include the header file. Why is this?
I just can't seem to find how to create a header file and where I can change the value of the variables. It sounds simple.
View 12 Replies View RelatedI need to write a C++ program, that extracts certain variables, x y z, from a file that is continuously being updated x y z. These variables are going to be used to recalculate a new answer.
My question is to see if it is possible to have an include .h file that is always being updated so that I can extract these three variables from it, and always have the newest venison of each variable, so that the answer to the equation is always the newest updated. Should I use fopen or fwrite to do this.
I need making my main function to run while not having any if or for statements. It can only declare variables and functions. Since my main function has command line arguments, how to so.
// This program counts all the words in a given file.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char* argv[]) {
FILE* txtFile = NULL; // File Pointer
char str[1000000];
[Code] ....
I think there is no always need of keyword extern in order to declare variables globally. Is it right?
For example I can declare a variable globally in one file and use it in some other provided that I have included the last one file ( that has the declaration of the variable of course) and compile these files together :
gcc -c f1.c f2.c for example
So I need to make a main function have no if/for/etc. statements so I need to move it to another function and call it in main. The problem is that it's a command line argument function so I'm confused on how it works. Here's an example:
Code:
#include <stdio.h>
int main(int argc, char* argv[])
{
printf("The program name %s", argv[0]);
if (argc == 2) {
printf("Argument supplied is %s", argv[1]); }
else if (argc > 2) {
printf("Too many arguments");}
else {
printf("One argument");}
}
How can i make this into two functions with main only declaring variables and calling other functions?
I am trying to compile a c program for sudoku. I have declare const instances as global variables, but when i try to compile the code it says that my declarations are not constant, here is some of the code.
#include <stdio.h>
#include <assert.h>
const int GRIDSIZE = 3;
const int GRID_SQUARED = GRIDSIZE * GRIDSIZE; //this line
const int ALL_VALUES = (1<<GRID_SQUARED)-1; //and this give//the error
int board [GRID_SQUARED][GRID_SQUARED];
Just wandering, will something like this work? header
Code:
#define func(arg) func_(arg) ...
static void func_(arg); code Code: #include "header"
int main()
{
func(arg);
}
If I have a static variable in a class e.g. a pointer to another class like this: (B is another class)
class A {
public:
static B* cB;
};
Then I set that variable and create multiple instances of class A like this:
A::cB = new B;
As = new A[Number];
Then will the value of cB be the same across all instances?
I cannot pass the class pointer in the constructor as I need to create an array of instances. I tried this method but I get linker error.... unresolved external.
Is it more expensive to use too many static variables instead of ordinary variables? If yes, then how?------------This is a topic given to me to find out about and I don't even know what are static variable except that they live throughout the life of program
and only disadvantage of using static variable instead ordinary variables in my mind is just they will use memory even when we don't need them
For static variables when the memory will be allocated? During compilation or linking or loading time? In below program i am getting error :
(Error C2099: initializer is not a constant in microsoft visual studio) .
If i initialize x = 10 or any constant it works , why?
Code:
main() {
int i=10;
static int x = i;//error ?
if(x==i)
printf("Equal");
[Code] .....
Is it possible to use & change global variables in a Static Library? For example:
I declare a
bool test = true;
globally.
Then later in an exported function If the user wants, he can set that test to false. So the program later when checks test if it's true, will notice that it's not true, since one of my function changed it.
Is it right?
I came across the following code today and I was a bit surprised that it worked:-
Code:
std::string func_A () {
static std::string x;
if (!x.empty())
return x;
[Code] ....
I've simplified things slightly - but the basic point is that both functions are in the same source file and they both have a static std::string called 'x'. Being static, I guess they aren't (strictly) local variables. So how does the compiler know that they're different entities? Does it encode their signatures using the function name or something like that? If I call each function separately I do seem to get the correct string...
Here is what I did,
Code:
// A.h
const int salary = 1000000;
// B.h
extern const int salary = 1000000;
But I still got multi-definition errors. How should I fix it?
How would I change the private variables in the header files and the code in the cpp files for the primary indexes so they use a dynamic array or vector instead. For the primary index, the initial vector size will be 8.
header
#ifndef MY_PRIMARY_INDEX_H
#define MY_PRIMARY_INDEX_H
#include
#include
#include
#include
class PrimaryIndex
[Code] ....
I've been wondering about something for a while:
Is it possible to declare a struct/class, in a cpp file, designed for local use, but with internal linkage?
The usecase is that every once in a while, I want to wrap "startXXX+endXXX" function pairs in a simple RAII struct. I just declare the struct in my cpp and use it once.
However, if I do this, (AFAIK), the compiler will generate an entry in the link table, which means I could potentially have link conflicts if I declare the same struct twice in two different cpp files.
Unless I'm mistaken, since the struct is declared in the same cpp that it is used, I wouldn't need external linkage. Is there a way to avoid it?
From my book:
"A static function might have this prototype:
static void Afunction(int n);
A static function can be called in relation to a particular object by a statement such as the following:
aBox.Afunction(10);
The function has no access to the non-static members of aBox. The same function could also be called without reference to an object. In this case, the statement would be:
CBox::Afunction(10);
where CBox is the class name. Using the class name and the scope resolution operator tells the compiler to which class Afunction() belongs."
Why exactly cant Afunction access non-static members?
What are the workarounds for accessing the non-static member variables of some class(Say A) inside static member functions of another class(Say B)? I am coding in c++. Class A is derived with public properties of class B. Any pointers?
View 7 Replies View RelatedI have written my program and it works when I keep everything in the header files, and then have my main. I am now splitting them up into implementation files, but Eclipse keeps giving me errors. It gives me error at every opening brace of the constructor and functions. It says on all of them "Redefinition of (name of constructor or method), Previously declared here." What am I doing wrong, because it works in the header file?
#include "KeyValuePair.h"
template<typename Key,typename Value>
KeyValuePair<Key,Value>::KeyValuePair()
[Code] .....
I am working on an assignment in which i have to perform th following task
myClass itsObject1,itsObject2;
itsObject2=5000+itsObject1;
I have defined overloaded operator as follows in the header file but in the cpp file of the class it gives error.
friend vli &vli::operator + (int &a,vli &obj);
How to define it in cpp file of my class?
What is the right syntax for implementing the .cpp of a template class?
Consider this LinkedList.h file:
Code: #include<iostream>
#include"Iterator.h"
template <class T>
class LinkedList {
[Code] ....
How should the implementation for the LinkedList constructor, for example, should look like in the LinkedList.cpp file?
I tried this:
Code: #include "LinkedList.h"
template <class T>
LinkedList<T>::LinkedList<T>() {
// constructor
}
LinkedList<T>::~LinkedList<T>() {
// destructor
}
But the compiler wouldn't accept it.
I wanted to share the value of a variable from Sender Program to Receive after program and want to calculate difference between send and receive. After studying Header file concept I program following three.
Now I am struck. How to to compile? I link all these file. I used following method:
Code:
gcc Sender.c -o Sender Sender.h
gcc Receiver.c -o Receiver Student.h
Then I run Sender and after that Receiver.I per my knowledge, Receiver should give difference but it gives error :
Code:
Receiver.c: In function "main":
Receiver.c:10:42: error: "Send" undeclared (first use in this function)
printf(" Total Receive is %d
",Receive-Send);
Code:
Sender.c
#include <stdio.h>
int Send ;
void main(){
[Code] ....
I have been working a project in C++. I have TTTMain.cpp file that has all the function calls, TTTFuntions.cpp that has all the functions, I have TTT.h file that has all the prototypes and variables and additionally I have Winner.h that has enum class Winner declaration in it. Here is my block of codes:
Winner.h file:
#ifndef winner
#define winner
enum class Winner {
[Code]....
My question is when I compile this gives me error on
Winner gameSquares[] = { Empty, Empty,Empty, Empty, Empty, Empty, Empty, Empty, Empty };
with saying "invalid use of non-static data data member" and It says "Empty was not declared in this scope."
I know calling enum is very very trick.