none
C++类相关:无法指定数组的显式初始值设定项 RRS feed

  • 问题

  • 各位前辈你们好,我是一名正在学习C++的学生,在对于类的使用上发现了一点问题,不知道该如何解决。

    我现在正在写一个win32控制台应用,我的思路是这样的,我想新建一个TEXT类,内有声明 “string a[3] = {"M1","M2","M3"};然后在main中对其进行声明,假设叫做text。

    此外,我又新建了一个Function类。其中写了个函数。(假设叫做Print) main中对其声明为extra。

    这样的动作做完后,我就能在main中使用extra.Print来调用Function中的函数。

    现在,我希望我的Print函数能够通过text.a[0]的方式来使用TEXT类中的M1来作为参数。

    请问这样的方法能够实现么?有实际意义么,我这样做的原因是因为我的这个程序有较多的文本,单独新建一个类的话能够便于我进行管理。我不喜欢在main里声明。 ;P

    谢谢各位前辈的回答。

    2013年12月27日 13:34

答案

  • 你好,

    根据你的描述,请问你是不是想通过Function 类中的Print 函数去打印TEXT类中的私有成员string?

    如果是关于访问权限的问题,你可以在TEXT类中实现一个public 的getstring的方法。

    然后让Print函数调用getstring方法获取string。


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    • 已标记为答案 Sharuru 2013年12月31日 9:57
    2013年12月30日 5:49
    版主
  • 你好,

    头文件中不能进行成员变量的初始化。

    请尝试在.cpp 文件中初始化数据。


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    • 已标记为答案 Sharuru 2013年12月31日 9:57
    2013年12月31日 4:03
    版主
  • >>此外,我又新建了一个Function类。其中写了个函数。(假设叫做Print) main中对其声明为extra

    >>这样的动作做完后,我就能在main中使用extra.Print来调用Function中的函数。

    >>main.cpp下使用 cout << extra.a[0]; 来企图输出“M1”,

    请问你是怎样定义“extra”的?具体有何功能?

    "cout << a[0]; "本身就能输出“M1"的。

    请再把修改后的代码张贴出来以做分析,包括.cpp文件中的。

    再次感谢你对本论坛的支持。


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    • 已标记为答案 Sharuru 2013年12月31日 9:57
    2013年12月31日 8:04
    版主
  • 你好!

    当编译ExtraFunction.cpp时,显示如下信息:

    extrafunction.cpp(11): error C2039: 'b' : is not a member of 'ExtraFunction'

    >>main.cpp下使用 cout << extra.a[0]; 来企图输出“M1”,此时编译能够通过,但是实际上程序没有显示任何内容。

    请问,你在编译时没有收到出错信息吗?

    另外,你为什么不将ExtraFunction.cpp 中的函数直接在头文件中定义呢?

    我们在创建工程时应当尽量采取优化方案。


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    • 已标记为答案 Sharuru 2013年12月31日 9:57
    2013年12月31日 8:36
    版主
  • 直接在头文件中定义函数?请问这个该如何理解,方便详细说明一下么?

    你好!

    我认为是直接通过类的成员函数实现。

    具体请参看以下链接:

    成员函数 (C++)

    添加成员函数 (Visual C++)

    C++:成员函数实现在类定义中与在类定义外的区别

    至于“ cout << extra.a[0]; ” ,请尝试单独赋值,就能有输出。

    Note: This response contains a reference to a third party World Wide Web site. Microsoft is providing this information as a convenience to you. Microsoft does not control these sites and has not tested any software or information found on these sites; therefore, Microsoft cannot make any representations regarding the quality, safety, or suitability of any software or information found there. There are inherent dangers in the use of any software found on the Internet, and Microsoft cautions you to make sure that you completely understand the risk before retrieving any software from the Internet.


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.


    2013年12月31日 9:55
    版主

全部回复

  • 你好,

    根据你的描述,请问你是不是想通过Function 类中的Print 函数去打印TEXT类中的私有成员string?

    如果是关于访问权限的问题,你可以在TEXT类中实现一个public 的getstring的方法。

    然后让Print函数调用getstring方法获取string。


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    • 已标记为答案 Sharuru 2013年12月31日 9:57
    2013年12月30日 5:49
    版主
  • 感谢回复!

    是的,我的设计思路正是如此。但是在这之前我必须能够初始化的我的string才行。这条报错信息就是在我企图在Function.h中试图使用 String a[3]= {"M1","M2","M3"}; 时发生的。

    2013年12月30日 7:10
  • 感谢回复!

    是的,我的设计思路正是如此。但是在这之前我必须能够初始化的我的string才行。这条报错信息就是在我企图在Function.h中试图使用 String a[3]= {"M1","M2","M3"}; 时发生的。

    请问出现了怎样的报错信息?

    可否在这里分享一些代码段以方便做分析?

    你可以在论坛中张贴文件的代码或者上传至https://skydrive.live.com/ .

    真诚感谢你对本论坛的支持。


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    2013年12月30日 9:54
    版主
  • 感谢回复!

    是的,我的设计思路正是如此。但是在这之前我必须能够初始化的我的string才行。这条报错信息就是在我企图在Function.h中试图使用 String a[3]= {"M1","M2","M3"}; 时发生的。

    请问出现了怎样的报错信息?

    可否在这里分享一些代码段以方便做分析?

    你可以在论坛中张贴文件的代码或者上传至https://skydrive.live.com/ .

    真诚感谢你对本论坛的支持。


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    谢谢跟进!我的Function.h中的代码

    #pragma once
    #include <windows.h>
    #include <string>
    
    using namespace std; 
    
    class ExtraFunction
    {
    	
    
    public:
    	ExtraFunction();
    	~ExtraFunction();
    	
    	HANDLE thisConsole;
    	CONSOLE_CURSOR_INFO cursor_info;
    
    	//string b;
    	string a[10] = { "M1", "M2", "M3" };
    	void gotoXY(int x, int y);
    	void setColor(int type);
    	void advPrint(int x, int y, string menu,int type,int line);
    };
    

    报错信息如下:

    Function.h(19): error C2536: “ExtraFunction::ExtraFunction::a”: 无法指定数组的显式初始值设定项

    我希望能够在类里完成对这个字符串的初始化然后在我的main中能够使用他。

    2013年12月30日 10:04
  • 你好,

    头文件中不能进行成员变量的初始化。

    请尝试在.cpp 文件中初始化数据。


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    • 已标记为答案 Sharuru 2013年12月31日 9:57
    2013年12月31日 4:03
    版主
  • 你好,

    头文件中不能进行成员变量的初始化。

    请尝试在.cpp 文件中初始化数据。


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    感谢跟进,后来我将头文件中的代码修改成 string a[10];

    对应的cpp文件中的ExtraFunction::ExtraFunction()下加入string a[10] = { "M1", "M2", "M3" };

    main.cpp下使用 cout << extra.a[0]; 来企图输出“M1”,此时编译能够通过,但是实际上程序没有显示任何内容。

    请问这是为什么? 

    2013年12月31日 7:47
  • >>此外,我又新建了一个Function类。其中写了个函数。(假设叫做Print) main中对其声明为extra

    >>这样的动作做完后,我就能在main中使用extra.Print来调用Function中的函数。

    >>main.cpp下使用 cout << extra.a[0]; 来企图输出“M1”,

    请问你是怎样定义“extra”的?具体有何功能?

    "cout << a[0]; "本身就能输出“M1"的。

    请再把修改后的代码张贴出来以做分析,包括.cpp文件中的。

    再次感谢你对本论坛的支持。


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    • 已标记为答案 Sharuru 2013年12月31日 9:57
    2013年12月31日 8:04
    版主
  • >>此外,我又新建了一个Function类。其中写了个函数。(假设叫做Print) main中对其声明为extra

    >>这样的动作做完后,我就能在main中使用extra.Print来调用Function中的函数。

    >>main.cpp下使用 cout << extra.a[0]; 来企图输出“M1”,

    请问你是怎样定义“extra”的?具体有何功能?

    "cout << a[0]; "本身就能输出“M1"的。

    请再把修改后的代码张贴出来以做分析,包括.cpp文件中的。

    再次感谢你对本论坛的支持。


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    你好,代码如下:

    ExtraFunction.h

    #pragma once
    #include <windows.h>
    #include <string>
    
    using namespace std; 
    
    class ExtraFunction
    {
    	
    
    public:
    	ExtraFunction();
    	~ExtraFunction();
    	
    	HANDLE thisConsole;
    	CONSOLE_CURSOR_INFO cursor_info;
    
    	//string b;
    	string a[10] ;
    	void gotoXY(int x, int y);
    	void setColor(int type);
    	void advPrint(int x, int y, string menu,int type,int line);
    };

    ExtraFunction.cpp如下

    #include "stdafx.h"
    #include "ExtraFunction.h"
    #include <windows.h>
    #include <iostream>
    #include <string>
    
    using namespace std;
    
    ExtraFunction::ExtraFunction()
    {
    	this->b = "42";
    	string a[10] = { "M1", "M2", "M3" };
    	thisConsole = GetStdHandle(STD_OUTPUT_HANDLE);	//Get Handle
    	/*	Set Cursor Info	*/
    	cursor_info.bVisible = false;	//Hide the Cursor 
    	cursor_info.dwSize = 20;	//Cursor Width 
    	SetConsoleCursorInfo(thisConsole, &cursor_info);
    }
    
    
    ExtraFunction::~ExtraFunction()
    {
    }
    
    void ExtraFunction::gotoXY(int x, int y)
    {
    	COORD coord;
    	coord.X = y;
    	coord.Y = x;
    	SetConsoleCursorPosition(thisConsole, coord);
    }
    
    void ExtraFunction::setColor(int type)
    {
    	if (type == 0)	
    	{
    		SetConsoleTextAttribute(thisConsole, FOREGROUND_RED | FOREGROUND_BLUE | FOREGROUND_GREEN );
    	}		
    	else if (type == 1)	//Choose
    	{
    		SetConsoleTextAttribute(thisConsole, FOREGROUND_RED | FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_INTENSITY | BACKGROUND_BLUE | BACKGROUND_INTENSITY);
    	}	
    	else if (type == 2)	//Notice
    	{
    		SetConsoleTextAttribute(thisConsole, FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_INTENSITY );
    	}	
    	else if (type == 3)	//Warning
    	{
    		SetConsoleTextAttribute(thisConsole, FOREGROUND_RED | FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_INTENSITY | BACKGROUND_RED);
    	}
    	else
    	{
    		;
    	}
    }
    
    void ExtraFunction::advPrint(int x, int y, string menu, int type,int line)
    {
    	gotoXY(x, y);
    	setColor(type);
    	if (line == 1)
    	{
    		cout << menu << endl;
    	}
    	else if (line == 0)
    	{
    		cout << menu;
    	}
    	setColor(0);
    }
    

    main.cpp如下

    #include "stdafx.h"
    #include <iostream>
    #include <iomanip>
    #include <string>
    #include <windows.h>
    #include <conio.h>
    #include "ExtraFunction.h"
    
    using namespace std;
    
    int main(int argc, char* argv[])
    {
    	ExtraFunction extra;
    	int x, y;
    	char key;
    	cout << extra.a[0];   //企图输出M1。
            return 0;
    }
    

    感谢回复!

    2013年12月31日 8:08
  • 你好!

    当编译ExtraFunction.cpp时,显示如下信息:

    extrafunction.cpp(11): error C2039: 'b' : is not a member of 'ExtraFunction'

    >>main.cpp下使用 cout << extra.a[0]; 来企图输出“M1”,此时编译能够通过,但是实际上程序没有显示任何内容。

    请问,你在编译时没有收到出错信息吗?

    另外,你为什么不将ExtraFunction.cpp 中的函数直接在头文件中定义呢?

    我们在创建工程时应当尽量采取优化方案。


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    • 已标记为答案 Sharuru 2013年12月31日 9:57
    2013年12月31日 8:36
    版主
  • 你好!

    当编译ExtraFunction.cpp时,显示如下信息:

    extrafunction.cpp(11): error C2039: 'b' : is not a member of 'ExtraFunction'

    >>main.cpp下使用 cout << extra.a[0]; 来企图输出“M1”,此时编译能够通过,但是实际上程序没有显示任何内容。

    请问,你在编译时没有收到出错信息吗?

    另外,你为什么不将ExtraFunction.cpp 中的函数直接在头文件中定义呢?

    我们在创建工程时应当尽量采取优化方案。


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    感谢跟进!

    抱歉,b是我用来调试的用的,ExtraFunction.cpp未注释掉,请谅解。

    注释掉之后就能成功编译了。

    直接在头文件中定义函数?请问这个该如何理解,方便详细说明一下么?


    2013年12月31日 9:14
  • 直接在头文件中定义函数?请问这个该如何理解,方便详细说明一下么?

    你好!

    我认为是直接通过类的成员函数实现。

    具体请参看以下链接:

    成员函数 (C++)

    添加成员函数 (Visual C++)

    C++:成员函数实现在类定义中与在类定义外的区别

    至于“ cout << extra.a[0]; ” ,请尝试单独赋值,就能有输出。

    Note: This response contains a reference to a third party World Wide Web site. Microsoft is providing this information as a convenience to you. Microsoft does not control these sites and has not tested any software or information found on these sites; therefore, Microsoft cannot make any representations regarding the quality, safety, or suitability of any software or information found there. There are inherent dangers in the use of any software found on the Internet, and Microsoft cautions you to make sure that you completely understand the risk before retrieving any software from the Internet.


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.


    2013年12月31日 9:55
    版主