C++ 此范围-qt creator-PoDoFo中未声明页

C++ 此范围-qt creator-PoDoFo中未声明页,c++,podofo,C++,Podofo,我发现类似的问题 但情况不同,因为我不处理头文件 从下面的代码可以看出,我正在使用PoDoFo库将pdf文件内容打印到屏幕上 #include <iostream> #include <podofo/podofo.h> using namespace std; int main() { //load a new document //PoDoFo::PdfMemDocument pdf("myDoc.pdf"); // this load a doc on

我发现类似的问题 但情况不同,因为我不处理头文件

从下面的代码可以看出,我正在使用PoDoFo库将pdf文件内容打印到屏幕上

#include <iostream>
#include <podofo/podofo.h>
using namespace std;
int main()
{
  //load a new document
  //PoDoFo::PdfMemDocument pdf("myDoc.pdf");

  // this load a doc on my disk

  PoDoFo::PdfMemDocument doc;
  doc.Load("myDoc.pdf");

  //iterate over each page"
  for(int pn = 0; pn < doc.GetPageCount(); ++pn){
    PoDoFo::PdfPage* page = doc.GetPage(pn);
  }

  //
  PoDoFo::PdfContentsTokenizer tok(page);
  const char* token = nullptr;
  PoDoFo::PdfVariant var;
  PoDoFo::EPdfContentsType type;
  while (tok.ReadNext(type, token, var)) {
    if (type == PoDoFo::ePdfContentsType_Keyword) {

    }
  }
  if (var.IsArray()) {
    PoDoFo::PdfArray& a = var.GetArray();
    for (size_t i = 0; i < a.GetSize(); ++i)
      if (a[i].IsString()) { }

  }
}
希望你能帮我解决这个问题


谢谢

我怀疑您的大括号没有放在正确的位置,根据@Scheff的评论,页面变量的范围包含在for循环中,您试图在循环结束后执行更多操作。我移动了
}
for循环的
,我认为它应该在下面的代码中,并且应该可以工作,尽管我也怀疑
}
结束,而
循环和最后一个
if
也可能在错误的位置

#include <iostream>
#include <podofo/podofo.h>
using namespace std;
int main()
{
  //load a new document
  //PoDoFo::PdfMemDocument pdf("myDoc.pdf");

  // this load a doc on my disk

  PoDoFo::PdfMemDocument doc;
  doc.Load("myDoc.pdf");
  PoDoFo::PdfPage* page 
  //iterate over each page"
  for(int pn = 0; pn < doc.GetPageCount(); ++pn){
    PoDoFo::PdfPage* page = doc.GetPage(pn);


  //
    PoDoFo::PdfContentsTokenizer tok(page);
    const char* token = nullptr;
    PoDoFo::PdfVariant var;
    PoDoFo::EPdfContentsType type;
    while (tok.ReadNext(type, token, var)) {
      if (type == PoDoFo::ePdfContentsType_Keyword) {

      }
    }
    if (var.IsArray()) {
      PoDoFo::PdfArray& a = var.GetArray();
      for (size_t i = 0; i < a.GetSize(); ++i)
        if (a[i].IsString()) { }

    }
 }  
}
#包括
#包括
使用名称空间std;
int main()
{
//加载新文档
//PoDoFo::pdfmemdocumentpdf(“myDoc.pdf”);
//这将在我的磁盘上加载一个文档
PoDoFo::PdfMemDocument文档;
doc.Load(“myDoc.pdf”);
PoDoFo::PdfPage*页
//“在每一页上迭代”
对于(int pn=0;pn
我怀疑您的花括号没有放在正确的位置,根据@Scheff的评论,页面变量的范围包含在for循环中,您试图在循环结束后执行更多操作。我将
}
移动到
for
循环中,我认为它可能应该在下面的代码中,并且应该在下面的代码中工作,尽管我也怀疑
}
结束,而
循环和最后一个
if
也可能在错误的位置

#include <iostream>
#include <podofo/podofo.h>
using namespace std;
int main()
{
  //load a new document
  //PoDoFo::PdfMemDocument pdf("myDoc.pdf");

  // this load a doc on my disk

  PoDoFo::PdfMemDocument doc;
  doc.Load("myDoc.pdf");
  PoDoFo::PdfPage* page 
  //iterate over each page"
  for(int pn = 0; pn < doc.GetPageCount(); ++pn){
    PoDoFo::PdfPage* page = doc.GetPage(pn);


  //
    PoDoFo::PdfContentsTokenizer tok(page);
    const char* token = nullptr;
    PoDoFo::PdfVariant var;
    PoDoFo::EPdfContentsType type;
    while (tok.ReadNext(type, token, var)) {
      if (type == PoDoFo::ePdfContentsType_Keyword) {

      }
    }
    if (var.IsArray()) {
      PoDoFo::PdfArray& a = var.GetArray();
      for (size_t i = 0; i < a.GetSize(); ++i)
        if (a[i].IsString()) { }

    }
 }  
}
#包括
#包括
使用名称空间std;
int main()
{
//加载新文档
//PoDoFo::pdfmemdocumentpdf(“myDoc.pdf”);
//这将在我的磁盘上加载一个文档
PoDoFo::PdfMemDocument文档;
doc.Load(“myDoc.pdf”);
PoDoFo::PdfPage*页
//“在每一页上迭代”
对于(int pn=0;pn
原因很明显(对我来说):声明
PoDoFo::PdfPage*page
是在
for
循环的周围
的范围(
{}
)内完成的。因此,它在那个里是局部的,并停止在循环体的外面“活动”。因此,您不能在循环之后访问。在解决循环和错误之前移动声明(而不是赋值)。当然,我会声明并初始化:
PoDoFo::PdfPage*page=nullptr
这样即使
GetPageCount()
返回
0
,它也有一个定义的值。顺便说一句,我不知道谁投了反对票,为什么投了反对票。然而,在没有留下评论的情况下否决投票是不好的。。。(嘘,没有解释对任何人都没有帮助,只会让人沮丧…@Scheff上帝保佑你!我一直面临着同样的问题,但现在我知道该去哪里检查并解决它了。原因很明显(对我来说):声明
PoDoFo::PdfPage*页面
是在周围
for
循环的范围(
{}
)内完成的。因此,它在那个里是局部的,并停止在循环体的外面“活动”。因此,您不能在循环之后访问。在解决循环和错误之前移动声明(而不是赋值)。当然,我会声明并初始化:
PoDoFo::PdfPage*page=nullptr
这样即使
GetPageCount()
返回
0
,它也有一个定义的值。顺便说一句,我不知道谁投了反对票,为什么投了反对票。然而,在没有留下评论的情况下否决投票是不好的。。。(嘘,没有解释对任何人都没有帮助,只会让人沮丧…@Scheff上帝保佑你!我一直面临着同样的问题,但现在我知道该去哪里检查并解决它。