نمایش نتایج 1 تا 9 از 9

نام تاپیک: استفاده از متغیر سراسری

  1. #1

    Question استفاده از متغیر سراسری

    سلام با کامپایلر ویژوال استودیو وقتی بخوام متغیری رو تو یه فایل .cpp تعریف کنم و از فایلهای سی پی پی دیگه هم بتونم اون متغیر رو مقداردهی بکنم یا مقدارشو بخونم باید اون متغیر و چجوری تعریف کنم؟؟
    با extern نمیشه؟تو یه کتاب زبان سی خوندم که اینجوری میشه تو همه فایلا ازش استفاده کرد ولی ظاهرا جواب نمیده

  2. #2

    نقل قول: استفاده از متغیر سراسری

    آره با extern شدنیه http://www.7khatcode.com/index.php?q...&show=808#a808
    مثلا :
    فایل Test.h :

    int a=3;

    فایل main
    #include <iostream>
    #include <Test.h>
    using namespace std;
    extern int a;
    int main() {
    cout<<a;
    }

  3. #3

    نقل قول: استفاده از متغیر سراسری

    نقل قول نوشته شده توسط omid_kma مشاهده تاپیک
    آره با extern شدنیه http://www.7khatcode.com/index.php?q...&show=808#a808
    مثلا :
    فایل Test.h :

    int a=3;

    فایل main
    #include <iostream>
    #include <Test.h>
    using namespace std;
    extern int a;
    int main() {
    cout<<a;
    }
    اگه قرار باشه تو هدر تعریفش کنم و هدرشو اول کدم بذارم میشه ازش راحت استفاده کرد دیگه چه نیازیه که دوباره اون متغیر و تو کد به صورت اکسترن تعریف کنم؟ یعنی الان بدون این خط نتیجه رو نمیده؟
    extern int a;

  4. #4

    نقل قول: استفاده از متغیر سراسری

    الان من میخوام چند تا تعریف و تو یه هدر بذارم که اون هدر رو چندجا باید اینکلود کنم و از اون تعاریف استفاده کنم با بررسی هایی که انجام دادم به دستورای #ifndef و ...رسیدم ولی نمیدونم باز مشکل از کجاست که همون ارورای قبلی رو میده یعنی میگه
    main.obj : error LNK2005: "wchar_t * system32_path" (?system32_path@@3PEA_WEA) already defined in GetDirectories.obj
    4>main.obj : error LNK2005: "wchar_t * cmd_path" (?cmd_path@@3PEA_WEA) already defined in GetDirectories.obj
    directories.h

    #ifndef directories_h_
    #define directories_h_
    LPWSTR system32_path=new WCHAR [MAX_PATH];
    LPWSTR cmd_path=new WCHAR [MAX_PATH];


    #endif





    هم تو main هم تو Getdirectories.cpp باید از این هدر استفاده کنم تازه تو یه فایل دیگه هم باید باشه کمکککککک

  5. #5

    نقل قول: استفاده از متغیر سراسری

    ضمنا با این روش نیازی به استفاده از اکسترن هست یا نه؟

  6. #6

    نقل قول: استفاده از متغیر سراسری

    نقل قول نوشته شده توسط fahimeh1512 مشاهده تاپیک
    اگه قرار باشه تو هدر تعریفش کنم و هدرشو اول کدم بذارم میشه ازش راحت استفاده کرد دیگه چه نیازیه که دوباره اون متغیر و تو کد به صورت اکسترن تعریف کنم؟ یعنی الان بدون این خط نتیجه رو نمیده؟
    extern int a;
    نه بالاخره لینکر باید یک جوری بفهمه که این x همون x داخل اون فایله اگر extern نزاری نمی تونه تشخیص بده
    حالت عادی فرض می کنه که این x فقط داخل همون هدر قابل استفادست.
    آخرین ویرایش به وسیله omid_kma : پنج شنبه 15 خرداد 1393 در 14:21 عصر

  7. #7

    نقل قول: استفاده از متغیر سراسری

    نقل قول نوشته شده توسط fahimeh1512 مشاهده تاپیک
    الان من میخوام چند تا تعریف و تو یه هدر بذارم که اون هدر رو چندجا باید اینکلود کنم و از اون تعاریف استفاده کنم با بررسی هایی که انجام دادم به دستورای #ifndef و ...رسیدم ولی نمیدونم باز مشکل از کجاست که همون ارورای قبلی رو میده یعنی میگه
    main.obj : error LNK2005: "wchar_t * system32_path" (?system32_path@@3PEA_WEA) already defined in GetDirectories.obj
    4>main.obj : error LNK2005: "wchar_t * cmd_path" (?cmd_path@@3PEA_WEA) already defined in GetDirectories.obj
    directories.h

    #ifndef directories_h_
    #define directories_h_
    LPWSTR system32_path=new WCHAR [MAX_PATH];
    LPWSTR cmd_path=new WCHAR [MAX_PATH];


    #endif





    هم تو main هم تو Getdirectories.cpp باید از این هدر استفاده کنم تازه تو یه فایل دیگه هم باید باشه کمکککککک
    استفاده از متغیر GLobal به این شکل کار درستی نیست حداقل اینارو داخل namesace بزارین یا struct .
    , و آره نیاز به extern هست

    ضمنا برای استفاده از .h داخل چند تا فایل باید داخل header از extern استفاده کنین داخل cpp فایل ها ازش استفاده کنین . مثلا
    Test.h :
    extern int*a

    test.cpp
    a=new int[12

    main.cpp

    cout<<a[2
    آخرین ویرایش به وسیله omid_kma : پنج شنبه 15 خرداد 1393 در 14:20 عصر

  8. #8

    نقل قول: استفاده از متغیر سراسری

    یعنی اینجوری باید درست بشه؟

    #ifndef directories_h_
    #define directories_h_


    namespace directory {

    LPWSTR system32_path=new WCHAR [MAX_PATH];
    LPWSTR cmd_path=new WCHAR [MAX_PATH];
    }




    #endif



    اینجوری استفاده میکنم دیگه

    wcscmp(current_directory,directory::system32_path)

    بازم همون ارورارو میده اخه

  9. #9

    نقل قول: استفاده از متغیر سراسری

    فرقی نمی کنه بازم نیاز به Extern داری
    توی ++C داخل فایل .h باید فقط declaration وجود داشته باشه داخل فایل .cpp از new استفاده کرد .
    directory.h رو به این شکل بزار :

    #ifndef directories_h_
    #define directories_h_
    namespace Directory {
    extern LPWSTR system32_path;
    extern LPWSTR cmd_path;
    }
    #endif









    بعد directory.cpp :

    #include <directory.h>


    LPWSTR Directory::system32_path=new WCHAR [MAX_PATH];
    LPWSTR Directory::cmd_path=new WCHAR [MAX_PATH];


    بعد حالا داخل هر فایل دیگه ای که خواستی ازش استفاده کن

    wcscmp(current_directory,directory::system32_path)
    آخرین ویرایش به وسیله omid_kma : پنج شنبه 15 خرداد 1393 در 15:16 عصر

تاپیک های مشابه

  1. ایجاد یک متغیر سراسری برای استفاده در تمامی صفحات؟؟
    نوشته شده توسط rd.net در بخش ASP.NET Web Forms
    پاسخ: 23
    آخرین پست: سه شنبه 26 دی 1391, 11:26 صبح
  2. سوال: ایجاد متغیر سراسری و استفاده در تمامی فرم ها
    نوشته شده توسط farzaneh66 در بخش C#‎‎
    پاسخ: 4
    آخرین پست: جمعه 19 آبان 1391, 20:18 عصر
  3. استفاده از متغیر مشترک بین دو برنامه مستقل
    نوشته شده توسط Panje Tala در بخش مباحث عمومی دلفی و پاسکال
    پاسخ: 10
    آخرین پست: شنبه 15 تیر 1387, 09:12 صبح
  4. طریقه استفاده از متغیر جاوا در کد PHP
    نوشته شده توسط ngmajid در بخش PHP
    پاسخ: 1
    آخرین پست: سه شنبه 11 بهمن 1384, 21:19 عصر
  5. تعریف متغیر سراسری
    نوشته شده توسط jahangostar در بخش VB.NET
    پاسخ: 3
    آخرین پست: شنبه 26 آذر 1384, 16:49 عصر

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •