【发布时间】:2015-10-15 11:32:32
【问题描述】:
我是一个完整的 C++ 菜鸟。我正在尝试设置 Redis 连接并能够使用 c++ 方法将密钥设置为 redis。 c++ 代码很长,所以我只包括相关部分: webpage.h
#ifndef WEBPAGE_H #define WEBPAGE_H #包括 #包括 #包括 #包括 #include "cookiejar.h" #include “redispp.h” 类配置; 类自定义页面; 类网页回调; 类网络访问管理器; 类 QWebInspector; WebPage 类:公共 QObject,公共 QWebFrame::PrintCallback { Q_OBJECT Q_PROPERTY(QString 标题 READ 标题) Q_PROPERTY(QString frameTitle READ frameTitle) Q_PROPERTY(QString content READ content WRITE setContent) Q_PROPERTY(QString frameContent READ frameContent WRITE setFrameContent) Q_PROPERTY(QString url READ url) Q_PROPERTY(QString frameUrl READ frameUrl) Q_PROPERTY(bool loading READ loading) Q_PROPERTY(int loadingProgress READ loadingProgress) Q_PROPERTY(bool canGoBack READ canGoBack) Q_PROPERTY(bool canGoForward READ canGoForward) Q_PROPERTY(QString plainText READ plainText) Q_PROPERTY(QString framePlainText READ framePlainText) Q_PROPERTY(QString libraryPath READ libraryPath WRITE setLibraryPath) Q_PROPERTY(QString offlineStoragePath READ offlineStoragePath) Q_PROPERTY(int offlineStorageQuota READ offlineStorageQuota) Q_PROPERTY(QVariantMap viewportSize READ viewportSize WRITE setViewportSize) Q_PROPERTY(QVariantMap paperSize READ paperSize WRITE setPaperSize) Q_PROPERTY(QVariantMap clipRect READ clipRect WRITE setClipRect) Q_PROPERTY(QVariantMap scrollPosition READ scrollPosition WRITE setScrollPosition) Q_PROPERTY(bool navigationLocked READ navigationLocked WRITE setNavigationLocked) Q_PROPERTY(QVariantMap customHeaders READ customHeaders WRITE setCustomHeaders) Q_PROPERTY(qreal zoomFactor READ zoomFactor WRITE setZoomFactor) Q_PROPERTY(QVariantList cookies READ cookies WRITE setCookies) Q_PROPERTY(QString windowName READ windowName) Q_PROPERTY(QObjectList pages READ pages) Q_PROPERTY(QStringList pagesWindowName READ pagesWindowName) Q_PROPERTY(bool ownsPages READ ownsPages WRITE setOwnsPages) Q_PROPERTY(QStringList framesName READ framesName) Q_PROPERTY(QString frameName READ frameName) Q_PROPERTY(int framesCount READ framesCount) Q_PROPERTY(QStringfocusedFrameName 读取focusedFrameName) Q_PROPERTY(QObject* cookieJar READ cookieJar WRITE setCookieJarFromQObject) Q_PROPERTY(QStringList captureContent READ captureContent WRITE setCaptureContent) 民众: WebPage(QObject* parent, const QUrl& baseUrl = QUrl()); 虚拟〜网页(); QWebFrame* mainFrame(); QString 内容()常量; QString frameContent() 常量; 无效 setContent(const QString& 内容); 无效 setFrameContent(const QString& 内容); QString title() 常量; QString frameTitle() 常量; QString url() 常量; QString frameUrl() 常量; 布尔加载()常量; int loadingProgress() 常量; QString plainText() 常量; QString framePlainText() 常量; QString libraryPath() 常量; void setLibraryPath(const QString& dirPath); QString 离线存储路径()常量; int offlineStorageQuota() 常量; 无效 setViewportSize(const QVariantMap& 大小); QVariantMap viewportSize() const; void setClipRect(const QVariantMap& size); QVariantMap clipRect() const; void setScrollPosition(const QVariantMap& size); QVariantMap scrollPosition() const; void setPaperSize(const QVariantMap& size); QVariantMap paperSize() const; 无效 setNavigationLocked(布尔锁); 布尔导航锁定(); void setCustomHeaders(const QVariantMap& headers); QVariantMap customHeaders() const; }webpage.cpp
# 包括“webpage.h” # 包括“networkaccessmanager.h” # 包括“utils.h” # 包括“config.h” # 包括“consts.h” # 包括“callback.h” # 包括“cookiejar.h” # 包括“system.h” # 包括“redispp.h” # ifdef Q_OS_WIN32 # 定义 STDOUT_FILENAME "/dev/stdout" # 定义 STDERR_FILENAME "/dev/stderr" /** * @class 自定义页面 */ 类 CustomPage:公共 QWebPage { Q_OBJECT 无效网页::connectRedis() { this->redis = redispp::Connection conn("127.0.0.1", "6379", "password", false); } void WebPage::redisSet(const QString& key,const QString& value) { this->redis.set(key, value); } int WebPage::offlineStorageQuota() 常量 { return m_customWebPage->settings()->offlineStorageDefaultQuota(); } void WebPage::showInspector(const int port) { m_customWebPage->settings()->setAttribute(QWebSettings::DeveloperExtrasEnabled, true); m_inspector = 新的 QWebInspector; m_inspector->setPage(m_customWebPage); 如果(端口 == -1){ m_inspector->setVisible(true); } 别的 { m_customWebPage->setProperty("_q_webInspectorServerPort", 端口); } } 无效网页::applySettings(const QVariantMap& def) { QWebSettings* opt = m_customWebPage->settings(); opt->setAttribute(QWebSettings::AutoLoadImages, def[PAGE_SETTINGS_LOAD_IMAGES].toBool()); opt->setAttribute(QWebSettings::JavascriptEnabled, def[PAGE_SETTINGS_JS_ENABLED].toBool()); opt->setAttribute(QWebSettings::XSSAuditingEnabled, def[PAGE_SETTINGS_XSS_AUDITING].toBool()); opt->setAttribute(QWebSettings::LocalContentCanAccessRemoteUrls, def[PAGE_SETTINGS_LOCAL_ACCESS_REMOTE].toBool()); opt->setAttribute(QWebSettings::WebSecurityEnabled, def[PAGE_SETTINGS_WEB_SECURITY_ENABLED].toBool()); opt->setAttribute(QWebSettings::JavascriptCanOpenWindows, def[PAGE_SETTINGS_JS_CAN_OPEN_WINDOWS].toBool()); opt->setAttribute(QWebSettings::JavascriptCanCloseWindows, def[PAGE_SETTINGS_JS_CAN_CLOSE_WINDOWS].toBool()); 如果(def.contains(PAGE_SETTINGS_USER_AGENT)){ m_customWebPage->m_userAgent = def[PAGE_SETTINGS_USER_AGENT].toString(); } if (def.contains(PAGE_SETTINGS_USERNAME)) { m_networkAccessManager->setUserName(def[PAGE_SETTINGS_USERNAME].toString()); } if (def.contains(PAGE_SETTINGS_PASSWORD)) { m_networkAccessManager->setPassword(def[PAGE_SETTINGS_PASSWORD].toString()); } if (def.contains(PAGE_SETTINGS_MAX_AUTH_ATTEMPTS)) { m_networkAccessManager->setMaxAuthAttempts(def[PAGE_SETTINGS_MAX_AUTH_ATTEMPTS].toInt()); } 如果(def.contains(PAGE_SETTINGS_RESOURCE_TIMEOUT)){ m_networkAccessManager->setResourceTimeout(def[PAGE_SETTINGS_RESOURCE_TIMEOUT].toInt()); } } QString WebPage::userAgent() 常量 { 返回 m_customWebPage->m_userAgent; } void WebPage::setNavigationLocked(bool lock) { m_navigationLocked = 锁; } 布尔网页::navigationLocked() { 返回 m_navigationLocked; } void WebPage::setViewportSize(const QVariantMap& 大小) { int w = size.value("宽度").toInt(); int h = size.value("height").toInt(); 如果 (w > 0 && h > 0) { m_customWebPage->setViewportSize(QSize(w, h)); } } QVariantMap WebPage::viewportSize() 常量 { QVariantMap 结果; QSize 大小 = m_customWebPage->viewportSize(); 结果[“宽度”] = size.width(); 结果[“高度”] = size.height(); 返回结果; } }编译错误
网页.cpp:950:11:错误:“网页”中没有名为“redis”的成员 this->redis = redispp::Connection conn("127.0.0.1", "6379", "password", false); ~~~~ ^ 网页.cpp:950:39:错误:预期为“(”用于函数式强制转换或类型构造 this->redis = redispp::Connection conn("127.0.0.1", "6379", "password", false); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 网页.cpp:955:7:错误:“网页”中没有名为“redis”的成员 this->redis.set(key, value); ~~~~ ^我使用的这个 c++ Redis 库是 https://github.com/brianwatling/redispp
注意** *我尝试在示例中使用 Redispp 命名空间,但连接类会与其他类发生冲突。 https://github.com/brianwatling/redispp/blob/master/test/multi.cpp *
整个 webpage.cpp 文件都在 pastebin 中。该文件超过了 StackOverflow 字符限制
http://pastebin.com/fUhRwy0R
任何帮助将不胜感激。
【问题讨论】:
-
所有空的
#include语句是怎么回事? -
Stackoverflow 无法正确呈现它,所以我删除了它们。包含的内容无关紧要。该脚本工作正常,我似乎无法全球化连接。