#pragma once
// CMySocket 命令目标
class CMySocket : public CSocket
{
public:
CMySocket();
virtual ~CMySocket();
virtual void OnAccept(int nErrorCode);
virtual void OnClose(int nErrorCode);
virtual void OnReceive(int nErrorCode);
virtual void OnSend(int nErrorCode);
//
private:
//CListenDlg ServerDlg;
int n_CurrentNum;
public:
//void SetParent(CListenDlg* ServerDlg, int CurrentNum);
};
这个也是我定义的类CListenDlg,不过这个类是基本对话框的,
为什么不能使用这个类来定义对象呢???
//CListenDlg ServerDlg;
提示错误是:
1>d:\我的文档\visual studio 2008\projects\serversocket\serversocket\mysocket.h(16) : error C2146: 语法错误 : 缺少“;”(在标识符“ServerDlg”的前面)
1>d:\我的文档\visual studio 2008\projects\serversocket\serversocket\mysocket.h(16) : error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
1>d:\我的文档\visual studio 2008\projects\serversocket\serversocket\mysocket.h(16) : error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
1>MySocket.cpp
1>d:\我的文档\visual studio 2008\projects\serversocket\serversocket\mysocket.h(16) : error C2146: 语法错误 : 缺少“;”(在标识符“ServerDlg”的前面)
1>d:\我的文档\visual studio 2008\projects\serversocket\serversocket\mysocket.h(16) : error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
1>d:\我的文档\visual studio 2008\projects\serversocket\serversocket\mysocket.h(16) : error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
1>ServerSocket.cpp
1>ServerSocketDlg.cpp
1>d:\我的文档\visual studio 2008\projects\serversocket\serversocket\mysocket.h(16) : error C2146: 语法错误 : 缺少“;”(在标识符“ServerDlg”的前面)
1>d:\我的文档\visual studio 2008\projects\serversocket\serversocket\mysocket.h(16) : error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
1>d:\我的文档\visual studio 2008\projects\serversocket\serversocket\mysocket.h(16) : error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
1>正在生成代码...
1>生成日志保存在“file://d:\我的文档\Visual Studio 2008\Projects\ServerSocket\ServerSocket\Debug\BuildLog.htm”
1>ServerSocket - 9 个错误,0 个警告
========== 全部重新生成: 成功 0 个,失败 1 个,跳过 0 个 ==========
22 个解决方案
#1
你都没把类CSocket的头文件包含进来
#2
急用的,主高手帮忙.....谢谢
#3
我试过了,把 #include "CListenDlg.h" 包含也一样 同样出错
#4
#pragma once
#include "ListenDlg.h"
// CMySocket 命令目标
class CMySocket : public CSocket
{
public:
CMySocket();
virtual ~CMySocket();
virtual void OnAccept(int nErrorCode);
virtual void OnClose(int nErrorCode);
virtual void OnReceive(int nErrorCode);
virtual void OnSend(int nErrorCode);
private:
CListenDlg ServerDlg;
int n_CurrentNum;
public:
//void SetParent(CListenDlg* ServerDlg, int CurrentNum);
};
错误提示:
1>d:\我的文档\visual studio 2008\projects\serversocket\serversocket\mysocket.h(17) : error C2146: 语法错误 : 缺少“;”(在标识符“ServerDlg”的前面)
1>d:\我的文档\visual studio 2008\projects\serversocket\serversocket\mysocket.h(17) : error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
1>d:\我的文档\visual studio 2008\projects\serversocket\serversocket\mysocket.h(17) : error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
1>MySocket.cpp
1>ServerSocketDlg.cpp
1>d:\我的文档\visual studio 2008\projects\serversocket\serversocket\mysocket.h(17) : error C2146: 语法错误 : 缺少“;”(在标识符“ServerDlg”的前面)
1>d:\我的文档\visual studio 2008\projects\serversocket\serversocket\mysocket.h(17) : error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
1>d:\我的文档\visual studio 2008\projects\serversocket\serversocket\mysocket.h(17) : error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
1>正在生成代码...
#include "ListenDlg.h"
// CMySocket 命令目标
class CMySocket : public CSocket
{
public:
CMySocket();
virtual ~CMySocket();
virtual void OnAccept(int nErrorCode);
virtual void OnClose(int nErrorCode);
virtual void OnReceive(int nErrorCode);
virtual void OnSend(int nErrorCode);
private:
CListenDlg ServerDlg;
int n_CurrentNum;
public:
//void SetParent(CListenDlg* ServerDlg, int CurrentNum);
};
错误提示:
1>d:\我的文档\visual studio 2008\projects\serversocket\serversocket\mysocket.h(17) : error C2146: 语法错误 : 缺少“;”(在标识符“ServerDlg”的前面)
1>d:\我的文档\visual studio 2008\projects\serversocket\serversocket\mysocket.h(17) : error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
1>d:\我的文档\visual studio 2008\projects\serversocket\serversocket\mysocket.h(17) : error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
1>MySocket.cpp
1>ServerSocketDlg.cpp
1>d:\我的文档\visual studio 2008\projects\serversocket\serversocket\mysocket.h(17) : error C2146: 语法错误 : 缺少“;”(在标识符“ServerDlg”的前面)
1>d:\我的文档\visual studio 2008\projects\serversocket\serversocket\mysocket.h(17) : error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
1>d:\我的文档\visual studio 2008\projects\serversocket\serversocket\mysocket.h(17) : error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
1>正在生成代码...
#5
CListenDlg本身没有编译通过,有错误;
你不能用一个有错的类去声明变量.
你不能用一个有错的类去声明变量.
#6
不可能吧,我把CListenDlg ServerDlg; 注释掉,是可以运行的
#7
你这可能是相互包含问题,即A类中用到B类,B类中用到A类。
#8
可我有 #pragma once 啊,这个不会有重复啊
#9
说清楚点,我还不是很明白 ,那我想A 和B都可以相互使用,好怎么办??
#10
重复定义
#11
顶,没有看懂。
#12
那现在看懂了没有...可这个#pragma once 怎么不起作用呢??????
#13
说明 一下,这个高手的说法是对的,问题已经得到了觖决,就是不明白为什么
#pragma once 不起作用
#14
先谢谢各位 啦
#15
mysocket.h(16) : error C2146: 语法错误 : 缺少“;”(在标识符“ServerDlg”的前面)
编译器认为这里有个类型没有声明
编译器认为这里有个类型没有声明
#16
相互引用, 仅限于头文件中的声明;//不能使用定义
要使用, 需要再在cpp文件中包含;
//a.h
class CListenDlg;
class CMySocket
{
CListenDlg dlg;
void function()
{dlg.open();}//wrong
}
//a.cpp
#include "ListenDlg.h"
void function()
{
dlg.open();//right
}
//b.h
class CMySocket;
class CListenDlg
{
//同上
}
#17
问题是我要在头文件中就要互相使用啊.
就是在类里面的定义使用另一个类的定义
这样子就不行,就是所说的重定义
#18
头文件卫士
#ifndef
#define
#endif
#ifndef
#define
#endif
#19
我以前也遇到!!.h改成.cpp就行了!!!
#20
都先声明下
#21
不要把对象作为成员 用对象指针作为成员,在构造里面new出来
构造函数写在类声明外面, 写在另外一个class的声明后面
构造函数写在类声明外面, 写在另外一个class的声明后面
#22
不可以头文件中,互相使用!!!!!!!
这是规则!!
#1
你都没把类CSocket的头文件包含进来
#2
急用的,主高手帮忙.....谢谢
#3
我试过了,把 #include "CListenDlg.h" 包含也一样 同样出错
#4
#pragma once
#include "ListenDlg.h"
// CMySocket 命令目标
class CMySocket : public CSocket
{
public:
CMySocket();
virtual ~CMySocket();
virtual void OnAccept(int nErrorCode);
virtual void OnClose(int nErrorCode);
virtual void OnReceive(int nErrorCode);
virtual void OnSend(int nErrorCode);
private:
CListenDlg ServerDlg;
int n_CurrentNum;
public:
//void SetParent(CListenDlg* ServerDlg, int CurrentNum);
};
错误提示:
1>d:\我的文档\visual studio 2008\projects\serversocket\serversocket\mysocket.h(17) : error C2146: 语法错误 : 缺少“;”(在标识符“ServerDlg”的前面)
1>d:\我的文档\visual studio 2008\projects\serversocket\serversocket\mysocket.h(17) : error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
1>d:\我的文档\visual studio 2008\projects\serversocket\serversocket\mysocket.h(17) : error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
1>MySocket.cpp
1>ServerSocketDlg.cpp
1>d:\我的文档\visual studio 2008\projects\serversocket\serversocket\mysocket.h(17) : error C2146: 语法错误 : 缺少“;”(在标识符“ServerDlg”的前面)
1>d:\我的文档\visual studio 2008\projects\serversocket\serversocket\mysocket.h(17) : error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
1>d:\我的文档\visual studio 2008\projects\serversocket\serversocket\mysocket.h(17) : error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
1>正在生成代码...
#include "ListenDlg.h"
// CMySocket 命令目标
class CMySocket : public CSocket
{
public:
CMySocket();
virtual ~CMySocket();
virtual void OnAccept(int nErrorCode);
virtual void OnClose(int nErrorCode);
virtual void OnReceive(int nErrorCode);
virtual void OnSend(int nErrorCode);
private:
CListenDlg ServerDlg;
int n_CurrentNum;
public:
//void SetParent(CListenDlg* ServerDlg, int CurrentNum);
};
错误提示:
1>d:\我的文档\visual studio 2008\projects\serversocket\serversocket\mysocket.h(17) : error C2146: 语法错误 : 缺少“;”(在标识符“ServerDlg”的前面)
1>d:\我的文档\visual studio 2008\projects\serversocket\serversocket\mysocket.h(17) : error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
1>d:\我的文档\visual studio 2008\projects\serversocket\serversocket\mysocket.h(17) : error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
1>MySocket.cpp
1>ServerSocketDlg.cpp
1>d:\我的文档\visual studio 2008\projects\serversocket\serversocket\mysocket.h(17) : error C2146: 语法错误 : 缺少“;”(在标识符“ServerDlg”的前面)
1>d:\我的文档\visual studio 2008\projects\serversocket\serversocket\mysocket.h(17) : error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
1>d:\我的文档\visual studio 2008\projects\serversocket\serversocket\mysocket.h(17) : error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
1>正在生成代码...
#5
CListenDlg本身没有编译通过,有错误;
你不能用一个有错的类去声明变量.
你不能用一个有错的类去声明变量.
#6
不可能吧,我把CListenDlg ServerDlg; 注释掉,是可以运行的
#7
你这可能是相互包含问题,即A类中用到B类,B类中用到A类。
#8
可我有 #pragma once 啊,这个不会有重复啊
#9
说清楚点,我还不是很明白 ,那我想A 和B都可以相互使用,好怎么办??
#10
重复定义
#11
顶,没有看懂。
#12
那现在看懂了没有...可这个#pragma once 怎么不起作用呢??????
#13
说明 一下,这个高手的说法是对的,问题已经得到了觖决,就是不明白为什么
#pragma once 不起作用
#14
先谢谢各位 啦
#15
mysocket.h(16) : error C2146: 语法错误 : 缺少“;”(在标识符“ServerDlg”的前面)
编译器认为这里有个类型没有声明
编译器认为这里有个类型没有声明
#16
相互引用, 仅限于头文件中的声明;//不能使用定义
要使用, 需要再在cpp文件中包含;
//a.h
class CListenDlg;
class CMySocket
{
CListenDlg dlg;
void function()
{dlg.open();}//wrong
}
//a.cpp
#include "ListenDlg.h"
void function()
{
dlg.open();//right
}
//b.h
class CMySocket;
class CListenDlg
{
//同上
}
#17
问题是我要在头文件中就要互相使用啊.
就是在类里面的定义使用另一个类的定义
这样子就不行,就是所说的重定义
#18
头文件卫士
#ifndef
#define
#endif
#ifndef
#define
#endif
#19
我以前也遇到!!.h改成.cpp就行了!!!
#20
都先声明下
#21
不要把对象作为成员 用对象指针作为成员,在构造里面new出来
构造函数写在类声明外面, 写在另外一个class的声明后面
构造函数写在类声明外面, 写在另外一个class的声明后面
#22
不可以头文件中,互相使用!!!!!!!
这是规则!!