C++ Right way to define function's default arguments [closed] - c++

Closed. This question needs debugging details. It is not currently accepting answers.
Edit the question to include desired behavior, a specific problem or error, and the shortest code necessary to reproduce the problem. This will help others answer the question.
Closed 5 years ago.
Improve this question
As far I understood the right place to put the default parameters is the declaration file (*.h). So for example:
test.cpp
void print_a(int a){
std::cout << a;
}
test.h
void print_a(int a = 5);
In this case I could have a third file. Where I can run print_a() with or without parameters.
main.cpp
#include test.h
int main(void)
{
print_a();
print_a(6);
return 0;
}
The problem is, what if inside test.cpp I have another function that wants to use print_a without parameters? The compiler tells me that the function has too few arguments.
How do you do it then ?

You need to provide the declaration of the function, with the default value, in test.cpp. The best way to do that is to #include test.h in test.cpp.

Related

Unable to access helper functions not in the namespace: undeclared identifier [closed]

Closed. This question needs debugging details. It is not currently accepting answers.
Edit the question to include desired behavior, a specific problem or error, and the shortest code necessary to reproduce the problem. This will help others answer the question.
Closed 12 months ago.
Improve this question
I currently have a namespace set up like this:
SomeClass.h
namespace somenamespace {
class SomeClass {
public:
foo();
}
}
SomeClass.cpp
namespace somenamespace {
SomeClass::foo() {
somehelperfunction();
}
}
void somehelperfunction() {
std::cout << "hejflsdjf\n";
}
Without changing my header file, I cannot find a way to implement this helper function in a way which allows my class implementation to access the helper function. I was under the impression that as long as the helper function was in the same file I would be able to access it within the class implementation. But I get a "undeclared identifier" error when trying to build.
Functions must be declared before called.

Problem with static data member - fixing linking error creates a compiler error [closed]

Closed. This question needs debugging details. It is not currently accepting answers.
Edit the question to include desired behavior, a specific problem or error, and the shortest code necessary to reproduce the problem. This will help others answer the question.
Closed 2 years ago.
Improve this question
game.h:
enum Game_state { MAIN_MENU, /*...*/ };
namespace list { class Linked_list { public: Linked_list() {} }; }
class Game {
public:
static Game_state state;
static list::Linked_list<Obj> objs;
};
Game_state Game::state = MAIN_MENU;
list::Linked_list<Obj> Game::objs = list::Linked_list<Obj>();
This gives me the linker error: multiple definition of Game::state (and Game::objs).
If I take out the type specifiers it gives me the compiler error: 'state' in 'class game' does not name a type (same for objs).
All I need is to initialize these members.
I'm using mingw on 32 bit windows 10.
You have to move those definitions into a translation unit (cpp file). Otherwise you will redefine them every time you include the header file somewhere, violating ODR.
Put the definitions of 'game::stat' and 'game::objs' in a *.cpp file and link against it.

will be initialized after [-Wreorder] [closed]

Closed. This question needs debugging details. It is not currently accepting answers.
Edit the question to include desired behavior, a specific problem or error, and the shortest code necessary to reproduce the problem. This will help others answer the question.
Closed 3 years ago.
Improve this question
When I compile my files I get this warning :
In file included from AsyncSQL.cpp:8:0:
AsyncSQL.h: In constructor 'CAsyncSQL::CAsyncSQL()':
AsyncSQL.h:192:10: warning: 'CAsyncSQL::m_iCopiedQuery' will be initialized after [-Wreorder]
int m_iCopiedQuery;
^
Here is my AsyngSQL.H http://pastebin.com/u72kyuq7
So what am I doing wrong?
The problem is the order in which you initialize members in the initializer list on line 22,
_SQLResult(): pSQLResult(NULL), uiNumRows(0),
uiAffectedRows(0), uiInsertID(0)
These should appear in the same order as they appear in the class definition. For example:
class test {
test(): foo(1), bar(2) { }
int foo;
long bar;
};

I receive this "error: 'string' not declared" when compiling [closed]

Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
Questions concerning problems with code you've written must describe the specific problem — and include valid code to reproduce it — in the question itself. See SSCCE.org for guidance.
Closed 9 years ago.
Improve this question
I am running into an error when compiling. The error states that 'string' is not declared. I know I'm not supposed to "include" anything in these files. The header file declares a class, and lists the member functions. Two of those functions have an integer passed as a parameter, and two others have a string passed as a parameter. The .cpp file is using namespace, and the string variable is definitely declared. What could be the issue?
Security.h
class Security
{private:
public:
void Driver();
void EncFileUsingRot(int rotNum);
void EncFileUsingCrypto(string file);
void DecFileUsingRot(int rotNum);
void DecFileUsingCrypto(string file);
};
Security.cpp
#include<fstream>
#include<iostream>
#include "Security.h"
using namespace std;
Two errors.
Firstly Security.h should have
#include <string>
Secondly
void EncFileUsingCrypto(string file);
should be
void EncFileUsingCrypto(std::string file);
and
void DecFileUsingCrypto(string file);
should be
void DecFileUsingCrypto(std::string file);

Problem using recursive method in c++ [closed]

Closed. This question needs debugging details. It is not currently accepting answers.
Edit the question to include desired behavior, a specific problem or error, and the shortest code necessary to reproduce the problem. This will help others answer the question.
Closed 5 years ago.
Improve this question
I have a class, defined in a .h like this
#ifndef JLLABOUR_H
#define JLLABOUR_H
class JLLabour{
public:
JLLabour(int, int);
double* recursivefft(double*,int);
void FFT(int*);
~JLLabour();
private:
int width;
int height;
};
#endif // JLLABOUR_H
and in my .cpp I have the definition of my recursive function, the problem is that when I call it again , during compilation it doesnt allow me to continue because the method has not been defined yet. I dont know how to solve this, please help.
#include <JLLabour.h>
double* JLLabour::recursivefft(double* x,int asize){
//operations and declartions...
//...
even = recursiveFFT(sum,m); //<-- the problem is here, in the recursion.
odd = recursiveFFT(diff,m);
// more operations....
return result;
}
}
FYI I am compiling under Linux, using Qt because Im developing a graphic app...
C++ is case sensitive. Your method is called recursivefft not recursiveFFT.