已经定义了一个类了,为什么还会报错“不明确的符号”?

wang_tututu 2014-01-01 08:56:40

void yema()
{


Pane mPane; //定义当前窗格对象
mWindowActive=wordApp.GetActiveWindow(); //获得当前窗口
mPane=mWindowActive.GetActivePane(); //获得当前窗格
mViewActive=mPane.GetView(); //获得当前视图
mViewActive.SetSeekView(10); //设置页脚视图
wordF = wordSelection.GetParagraphFormat();
wordF.SetAlignment(1); //居中

//wordSelection.TypeText("第 页,共19页 ");
//wordSelection.TypeText("第 页,共19页 ");

Fields fields1 = wordSelection.GetFields();
fields1.Add( wordSelection.GetRange(),COleVariant(short(33)),COleVariant("PAGE "),vfalse); //增加页码域
mViewActive.SetSeekView(0); //回到正文视图


}




这是一个生成页码的代码,调试的时候报错:错误 2 error C2872: “Fields”: 不明确的符号,但是在那段代码的文档中已经引用了msword.h

那么,为什么还会报这个错误呢?

谢谢各位了,祝新年快乐!
...全文
1040 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
wang_tututu 2014-01-06
  • 打赏
  • 举报
回复
引用 16 楼 vipcxj 的回复:
大神,我还有个疑问,我一开始贴出来的那段代码(void yema())是用来生成页码的,但是没成功,我以为是那个Fields错误导致的,现在这个错误没了,但是还是生成页码失败,页码地方是空白的,您觉得这是为虾米呢?我该从哪个角度考虑这个问题呢?谢谢了
  • 打赏
  • 举报
回复
文件路径不正确。 需要加上命名空间?
wang_tututu 2014-01-04
  • 打赏
  • 举报
回复
引用 12 楼 vipcxj 的回复:
error C2872 http://msdn.microsoft.com/en-us/library/t57wswcs.aspx 哎,被LZ误导了,这个错误不是缺少声明,而是声明冲突,可能有两个不同命名空间中有相同类型的声明,LZ查下都有哪些类的名字叫Fields,毕竟这个名字估计很常见。
膜拜!!的确是两个文件中都有Fields, 一个是“\msword.h(3526) : Fields” 一个是“\debug\msado15.tlh(1368) : std::Fields” 我直接把 using namespace std ;注释掉了,然后就不报那个错误了,不知道我这样改是不是正确的呢?
vipcxj 2014-01-04
  • 打赏
  • 举报
回复
引用 15 楼 Adol1111 的回复:
[quote=引用 14 楼 wang_tututu 的回复:] [quote=引用 12 楼 vipcxj 的回复:] error C2872 http://msdn.microsoft.com/en-us/library/t57wswcs.aspx 哎,被LZ误导了,这个错误不是缺少声明,而是声明冲突,可能有两个不同命名空间中有相同类型的声明,LZ查下都有哪些类的名字叫Fields,毕竟这个名字估计很常见。
膜拜!!的确是两个文件中都有Fields, 一个是“\msword.h(3526) : Fields” 一个是“\debug\msado15.tlh(1368) : std::Fields” 我直接把 using namespace std ;注释掉了,然后就不报那个错误了,不知道我这样改是不是正确的呢?[/quote] using namespace std;尽量少用,特别是不要出现在头文件里。如果用的少的话,可以用using std::XXX写出来,也可以吧这句话写到具体的函数里面,减少对全局的影响。有些函数完全用不到stl的东西,但却因为using造成了命名冲突。[/quote] 这个可以看看boost的示例,boost是命名空间用得最频繁的库了,往往命名空间还有深层嵌套,它的做法有 给命名空间取个别名

namespace qi = boost::spirit::qi;
还有在{}里面用using namespace XXX,这样using的作用范围只局限在{}里。还有就是直接把命名空间里的对象释放出来

using boost::spirit::space; //这样space直接表示boost::spirit::space
Adol1111 2014-01-04
  • 打赏
  • 举报
回复
引用 14 楼 wang_tututu 的回复:
[quote=引用 12 楼 vipcxj 的回复:] error C2872 http://msdn.microsoft.com/en-us/library/t57wswcs.aspx 哎,被LZ误导了,这个错误不是缺少声明,而是声明冲突,可能有两个不同命名空间中有相同类型的声明,LZ查下都有哪些类的名字叫Fields,毕竟这个名字估计很常见。
膜拜!!的确是两个文件中都有Fields, 一个是“\msword.h(3526) : Fields” 一个是“\debug\msado15.tlh(1368) : std::Fields” 我直接把 using namespace std ;注释掉了,然后就不报那个错误了,不知道我这样改是不是正确的呢?[/quote] using namespace std;尽量少用,特别是不要出现在头文件里。如果用的少的话,可以用using std::XXX写出来,也可以吧这句话写到具体的函数里面,减少对全局的影响。有些函数完全用不到stl的东西,但却因为using造成了命名冲突。
大奶兔白糖 2014-01-03
  • 打赏
  • 举报
回复
还是楼上哥们仔细。。。。
大奶兔白糖 2014-01-02
  • 打赏
  • 举报
回复
少包含头文件了吧?Fields是在msword.h里面定义的吗?
漫步者、 2014-01-02
  • 打赏
  • 举报
回复
你包含的文件路径确定是对的?
兆帅 2014-01-02
  • 打赏
  • 举报
回复
引用 1 楼 hejinjing_tom_com 的回复:
没有包含正确的头文件
++
vipcxj 2014-01-02
  • 打赏
  • 举报
回复
error C2872 http://msdn.microsoft.com/en-us/library/t57wswcs.aspx 哎,被LZ误导了,这个错误不是缺少声明,而是声明冲突,可能有两个不同命名空间中有相同类型的声明,LZ查下都有哪些类的名字叫Fields,毕竟这个名字估计很常见。
叶金迟 2014-01-02
  • 打赏
  • 举报
回复
你使用Fields的文件中没有包含好头文件 可能是头文件路径不对。
MsgTo 2014-01-02
  • 打赏
  • 举报
回复
你这个用等号Fields fields1 = wordSelection.GetFields(); 是不是 得重载操作符 =
wang_tututu 2014-01-02
  • 打赏
  • 举报
回复
引用 6 楼 u013359403 的回复:
贴出你完整头文件,会不会是因为#ifndef 跳过了
我在msword.h和数据库3Dlg.h中都没有用到#ifndef
wang_tututu 2014-01-02
  • 打赏
  • 举报
回复
引用 7 楼 vipcxj 的回复:
查下你Fields类是否是在某个命名空间中?
我搜索了一下,整个工程中,定义命名空间的只有‘using namespace std ;’这一处
vipcxj 2014-01-02
  • 打赏
  • 举报
回复
查下你Fields类是否是在某个命名空间中?
v5wan 2014-01-02
  • 打赏
  • 举报
回复
贴出你完整头文件,会不会是因为#ifndef 跳过了
wang_tututu 2014-01-02
  • 打赏
  • 举报
回复
引用 1 楼 hejinjing_tom_com 的回复:
没有包含正确的头文件
引用 2 楼 hanzhaoshuai 的回复:
[quote=引用 1 楼 hejinjing_tom_com 的回复:] 没有包含正确的头文件
++[/quote]
引用 3 楼 ganpengjin1 的回复:
你包含的文件路径确定是对的?
引用 4 楼 bijiaoben 的回复:
少包含头文件了吧?Fields是在msword.h里面定义的吗?
各位看一下,这个是msword.h里面对Fields类的定义

class Fields : public COleDispatchDriver
{
public:
	Fields() {}		// Calls COleDispatchDriver default constructor
	Fields(LPDISPATCH pDispatch) : COleDispatchDriver(pDispatch) {}
	Fields(const Fields& dispatchSrc) : COleDispatchDriver(dispatchSrc) {}

// Attributes
public:

// Operations
public:
	LPDISPATCH GetApplication();
	long GetCreator();
	LPDISPATCH GetParent();
	long GetCount();
	long GetLocked();
	void SetLocked(long nNewValue);
	LPUNKNOWN Get_NewEnum();
	LPDISPATCH Item(long Index);
	void ToggleShowCodes();
	long Update();
	void Unlink();
	void UpdateSource();
	LPDISPATCH Add(LPDISPATCH Range, VARIANT* Type, VARIANT* Text, VARIANT* PreserveFormatting);
};
下面是yema函数所在cpp文件的所有引用

#include "stdafx.h"
#include "comdef.h"
#include "msword.h"
#include "数据库3.h"
#include "数据库3Dlg.h"
#include <string.h>
#include <winsock.h>
#include <iostream>


using namespace std ;


#include <string>

谢谢大家了,本人菜鸟
hjjdebug 2014-01-01
  • 打赏
  • 举报
回复
没有包含正确的头文件

64,439

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧