所以,我有两个类......结构非常基础.我尝试将一个导入另一个,并声明该类类型的新对象...但是,它似乎读取类名作为变量的名称?!
下面提供的头类不会正确读取"ApplicationManager"类.码:
####ifndef _GAME_H_
####define _GAME_H_
####include "application.h"
####include "applicationmanager.h"
class Game : public Application
{
public:
Game();
~Game();
void LoadContent() override;
void UnloadContent() override;
void Draw() override;
private:
//int ApplicationManager; //WHY DOES THIS COMPILE??!
ApplicationManager management; //This DOES NOT WORK?
};
####endif
Run Code Online (Sandbox Code Playgroud)
这是"ApplicationManager"类的标题.码:
####ifndef _APPMANAGER_H_
####define _APPMANAGER_H_
####include "game.h"
####include "application.h"
class ApplicationManager
{
public:
ApplicationManager(void);
~ApplicationManager(void);
private:
};
####endif
Run Code Online (Sandbox Code Playgroud)
发生的错误告诉我,我需要一个";" 在"管理"之前,并且"ApplicationManager"缺少类型说明符,因此假定它是默认类型int.
...任何想法为什么它不能正确编译?其他人可以尝试这个并报告结果吗?我复制了代码,并将其粘贴到另一个解决方案中,看看是否有东西被破坏了......它仍然无效.
是否建议使用C++/CLI作为新的.Net应用程序的主要语言?应用程序将不使用本机代码(纯CLI).这个问题的原因是,我想使用框架而不是倾向于使用像C#或VB这样的新语言.
斯特凡
我的项目中有3个班级(当然是名字A,B然后C).A是抽象的.它们具有以下关系:
A是基类的B
B基类C
在里面C,我宣布一个变量vector<A*> member_vector;.这导致以下问题:
C3699 ::
'*'不能在'A'
C4368 类型上使用此间接:无法定义'member_vector'为托管成员'C':不支持混合类型.
你有没有发现这个错误的线索?我认为循环类的使用可能存在问题,但是,如何克服它呢?
以下编码方式有什么区别:
if (String::IsNullOrEmpty(TextBox1->Text))
Run Code Online (Sandbox Code Playgroud)
和
if (TextBox1->Text == "")
Run Code Online (Sandbox Code Playgroud)
?
Visual Studio Ultimate 2012 - 必须定义入口点.
你好.我有文件:
MyForm.h
Forma.h
MyForm.cpp
在Myform.cpp我有
#include "MyForm.h"
using namespace std;
using namespace System;
using namespace System::Windows::Forms;
void main(array<String^>^args){
Application::EnableVisualStyles();
Application::SetCompatibleTextRenderingDefault(false);
Project1::MyForm form;
Application::Run(%form);
}
Run Code Online (Sandbox Code Playgroud)
但是当我试图重新发现它时,我有错误:
错误2错误LNK1561:必须定义入口点
我是c ++的新手,我正在用visual c ++制作一个程序.在出现此错误之前,一切都很顺利:
error C2440: '==' : cannot convert from 'const char [11]' to'System::Windows::Forms::TextBox ^'
Run Code Online (Sandbox Code Playgroud)
我很确定它与我在文本框中放入数字而不是单词有关.
这是代码的一部分:
if (fnum==true){
if (phoneNum=="555555555"){ // i think this part causes the problem
//code for when the phone number is correct
} else {
//if phone number is not correct
}
}
Run Code Online (Sandbox Code Playgroud)
我试过把'5555555555'代替"5555555555",但它给了我一个不同的错误
error C2015: too many characters in constant
error C2446: '==' : no conversion from 'int' to 'System::Windows::Forms::TextBox ^'
Run Code Online (Sandbox Code Playgroud)
下面是代码的其余部分:
#pragma once
#include <stdio.h>
#include <Windows.h>
bool fnum = true;
bool …Run Code Online (Sandbox Code Playgroud) 我以前用C#编程,我想学习C++.在事先了解ANSI/ISO C++之前,我可以直接学习C++/CLI吗?
我认为答案会很短,例如“是”或“否”,所以我一次有两个问题。
问题1:我阅读了IntPtr的理论解释,但与本机C ++指针相比,它更容易理解。可以说我有一些结构。
ref struct CData
{
double Key;
};
Run Code Online (Sandbox Code Playgroud)
使用本机代码中的指针,我可以做到:
1) int address = & CData; // if i need its address
2) double value = * CData; // if i need value of its field
3) void * pointer1 = CData; // if i want create pointer to struct
4) CData * pointer2 = CData; // if i want create pointer to struct
Run Code Online (Sandbox Code Playgroud)
如果CData是托管对象,则可以通过以下方式完成上述操作:
1) IntPtr address = GCHandle::Alloc(CData).AddrOfPinnedObject() // if i need address
2) cannot get …Run Code Online (Sandbox Code Playgroud) 我有一个C#DLL,其代码派生自一个基类,它是用托管C++编写的.(我对基类代码没有任何控制权)
此基类(在托管C++中)具有成员
int *buffer
Run Code Online (Sandbox Code Playgroud)
预期派生类(在C#中)是memset(用零填充).派生类知道缓冲区的大小.
我使用不安全的上下文,在派生类中访问基类的成员"int*buffer".请告诉我有什么特别的方法可以在c#中的"不安全"上下文中设置缓冲区.
我已经研究过这个与C#中的memset相同的是什么?有关详细信息,但我想知道有什么特别针对"不安全"的背景.
背景:这是一个转换项目,其中派生类本身之前是托管c ++.现在我将派生类DLL单独转换为C#.我也无法控制基类代码!当前代码流如下:只有派生类知道缓冲区的大小.基类通过从派生中获取缓冲区的大小来为该特定大小创建内存,但它不会填充零.派生类Zero首先填充它,然后需要用其内容适当地填充缓冲区.虽然很奇怪,但事实就是如此.
谢谢!
我正在创建一个C ++ / CLI DLL,该DLL应该用作包装器。它的目的是包装C#SDK并将函数呈现给本机C ++代码。我总是收到混合类型的错误,并且托管类中的using语句被标记为红色,因此,到目前为止,这是我得到的:
#pragma once
#include <iostream>
#include <memory>
#include <string>
namespace TPInterface
{
class ITPFactory
{
public:
static __declspec(dllexport) std::shared_ptr<ITPFactory> CreateTPFactory();
};
}
Run Code Online (Sandbox Code Playgroud)
这将创建TPFactory的实例。
#pragma once
#include "ITPSSITotalStation.h"
#include "TPSSITotalStation.h"
#include "ITPFactory.h"
#include <iostream>
#include <memory>
#include <string>
namespace TPInterface
{
class TPFactory : public ITPFactory
{
public:
static std::shared_ptr<SensorSoftwareInterface::TotalStation::ITPSSITotalStation> CreateTPSSITotalStation(std::string pathToDriver);
};
}
Run Code Online (Sandbox Code Playgroud)
这将创建一个TPSSITotalStation对象,该对象是ITPSSITotalStation接口。
TPSSITotalStation-> TPSSIBase->TPBase
二者TPSSIBase并TPBase含有被写入在托管代码(参照类)的类(gcroot和报头)。
现在,编译器告诉我,那些ref类是混合的,不允许的,依此类推。我在这里没问题...我在做什么错?
抱歉,我很笨,我是C ++的新手,来自C#。
错误:
Error 7 error C4368: cannot define 'm_selectedPath' …Run Code Online (Sandbox Code Playgroud) c++-cli ×10
.net ×3
c# ×2
visual-c++ ×2
c++ ×1
clr ×1
inheritance ×1
pointers ×1
string ×1
winforms ×1