PDA

View Full Version : سوال: مشکلات تعریف متغییر static در کلاس در زبان ++C



md3848
یک شنبه 31 مرداد 1395, 05:53 صبح
سلام
1) چرا نمیشه متغییر استاتیک رو در همون تعریف کلاس مقدار دهی کرد؟(مثلا متغییر STATIC رو در قسمت PUBLIC که تعریف میکنم اگه مقدار اولیه بهش بدم کامپایلر ارور میده ولی برای متغییر های معمولی این مشکل وجود نداره)
2) چرا نمیشه مقدار متغییر های STATIC رو در پروژه به کمک :: خوند؟

class MyClass { public:
MyClass(void);
int Num1 = 2;
static int Num2;


private:
};

کامبیز اسدزاده
یک شنبه 31 مرداد 1395, 21:07 عصر
سلام
1) چرا نمیشه متغییر استاتیک رو در همون تعریف کلاس مقدار دهی کرد؟(مثلا متغییر STATIC رو در قسمت PUBLIC که تعریف میکنم اگه مقدار اولیه بهش بدم کامپایلر ارور میده ولی برای متغییر های معمولی این مشکل وجود نداره)
2) چرا نمیشه مقدار متغییر های STATIC رو در پروژه به کمک :: خوند؟

class MyClass { public:
MyClass(void);
int Num1 = 2;
static int Num2;


private:
};

سلام

برای اینکه شما بتونید یک متغیر رو به صورت استاتیک تعریف کنید به روش زیر عمل کنید:

const static int Num2 = 2;


حتی میتونید از روش های پیش پردازنده ها استفاده کنید.

#define Num2 2;

md3848
یک شنبه 31 مرداد 1395, 23:19 عصر
ممنون از شما - خب const تعریف کنم که دیگه نمیشه مقدار متغییر رو تغییر داد که - میشه؟

در ضمن من هنوز تو دسترسی به متغییر static داخل کلاس مشکل دارم و visual studio ارور میده.

فایل پروژه
#include "stdafx.h"#include <iostream>
#include "Ali.h"
MyClass Obj1;


int main(void)
{
std::cout << MyClass::Num2;



while (1);
return 0;
}



فایل ALI.H
class MyClass {public:
MyClass(void);
int Num1;
const static int Num2;
static int Func1(void);
private:
};


فایل ALI.cpp
#include "stdafx.h"#include "Ali.h"


MyClass::MyClass() {}

کامبیز اسدزاده
یک شنبه 31 مرداد 1395, 23:52 عصر
ممنون از شما - خب const تعریف کنم که دیگه نمیشه مقدار متغییر رو تغییر داد که - میشه؟

در ضمن من هنوز تو دسترسی به متغییر static داخل کلاس مشکل دارم و visual studio ارور میده.

فایل پروژه
#include "stdafx.h"#include <iostream>
#include "Ali.h"
MyClass Obj1;


int main(void)
{
std::cout << MyClass::Num2;



while (1);
return 0;
}



فایل ALI.H
class MyClass {public:
MyClass(void);
int Num1;
const static int Num2;
static int Func1(void);
private:
};


فایل ALI.cpp
#include "stdafx.h"#include "Ali.h"


MyClass::MyClass() {}


فایل .h


#ifndef MYCLASS_H
#define MYCLASS_H


class MyClass {public:
MyClass(void);
int Num1;
static int const Num2;
static int Func1(void);
private:
};

#endif // MYCLASS_H



فایل .cpp


#include "myclass.h"

#include <iostream>

MyClass::MyClass(){}

int const MyClass::Num2 = 10;


و در نهایت main


std::cout << MyClass::Num2;