我目前正在尝试使用"this"指针传递指向函数的指针:
void GameObject::process_events()
{
std::vector<ObjectEvent*>::iterator it;
for (it = events.begin(); it != events.end(); it++)
(*it)->process(this);
}
Class ObjectEvent
{
private:
bool* trigger;
void (*response)(GameObject*);
public:
process(GameObject* obj)
{
if (*trigger)
response(obj);
}
};
Run Code Online (Sandbox Code Playgroud)
但是我收到一个错误:
No matching function call to 'ObjectEvent::process(GameObject* const)'
Run Code Online (Sandbox Code Playgroud)
可能是什么问题呢?
我已经尝试通过阅读它来了解this关键字所指的内容.好吧,那没有帮助.所以请帮我这个!
手动函数调用与事件监听器绑定的区别在哪里?
var app = {
foo: true,
bar: function() {
console.log("this",this.foo);
console.log("app",app.foo);
}
}
app.bar();
/* this true
app true */
document.addEventListener("click", app.bar);
/* this undefined
app true */
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助
所以在jquery中,如果我想在.test单击中定位类中的div,我使用以下代码:
$('.test div').click(function(){
//do something
});
Run Code Online (Sandbox Code Playgroud)
但如果"做某事"部分需要一个this参数,我似乎无法获得相同的效果.所以我想说我希望在任何div中制作所有粗体文本,并且test淡出.我必须做这样的事情:
$('.test div').click(function(){
$(this ' b').animate({
opacity:toggle
},500);
});
Run Code Online (Sandbox Code Playgroud)
但那是无效的代码.那么我如何定位thisJquery选择器中的特定元素?
简单的问题.为什么表达式typeof(this)无效C#?还是表达sizeof(this)呢?当我尝试运行一个简短的测试程序时,它会显示Type Expected,然后抛出一堆其他语法错误.我的意思是,typeof是一个方法(或者你传递参数的关键字,不确定),并且它是相同的sizeof,那么为什么它不是this一个有效的参数?我的意思是,你可以用this(例如MyMethod(this))调用很多方法,那么制作typeof和sizeof特殊的是什么?
在为像a这样的东西编写代码片段时,这非常有用DependencyProperty.例如,查看propa代码段.它必须typeof(ownerclass)在那里使用.如果可以的话会好得多typeof(this).
测试程序:
using System;
public struct TestingClass
{
public static void Main()
{
TestingClass tc = new TestingClass();
tc.Test();
Console.ReadKey(true);
}
public void Test()
{
Console.WriteLine(typeof(this)); //error here
Console.WriteLine(sizeof(this)); //and here too
}
}
Run Code Online (Sandbox Code Playgroud) 我在C++中有两个类:
class Base
{
int baseField;
public:
Base();
~Base();
T BaseMethod();
virtual SomeMethod()=0;
};
class Derived : public Base
{
int derivedField;
public:
Derived()
~Derived();
T DerivedMethod();
virtual SomeMethod() {...}; // Some implementation
};
Run Code Online (Sandbox Code Playgroud)
我的问题是它是如何在内存中表示的,即这个类的指针,vptr(vtable)字段和方法指针在哪里.好的,它依赖于编译器,但有一些不成文的标准.我对Visual Studio和gcc编译器最感兴趣.
[编辑:我用一个虚拟方法来改进示例,之前没有任何虚拟]
有没有一些关于这个主题的书籍
在我学习线程的过程中,这是按预期工作的
public class Game implements Runnable{
//FIELDS
private Thread t1;
boolean running;
//METHODS
public void start(){
running = true;
t1 = new Thread(this);
t1.start();
}
public void run(){
while (running){
System.out.println("runnin");
try {
Thread.sleep(17);
}
catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后,当我将线程参数更改为
t1=new Thread (new Game());
Run Code Online (Sandbox Code Playgroud)
程序不再进入run方法.它们不应该是一样的吗?替换"this"关键字的另一种方法应该是什么?
编辑:我从另一个类调用start方法.
甚至在创建实例后将运行变量设置为true,它仍然为false:
public void start(){
t1 = new Thread(new Game());
running = true;
t1.start();
}
Run Code Online (Sandbox Code Playgroud) 在下面的程序中我使用了这个(1)和这个(2)使用这个(1)和这个(2)的目的是什么,我也想知道这是一个关键字或方法?我是新手java编程语言.
class Const
{
Const()
{
this(1);
System.out.println(1);
}
Const(int x)
{
System.out.println(2);
}
}
class const1 extends Const
{
int a;
const1()
{
this(8);
System.out.println(3);
}
const1(int x)
{
System.out.println(4);
}
public static void main(String s[])
{
new const1();
}
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用makefile编译其他人编写的程序,在使用它之前我没有时间学习程序中的所有内容 - 因此我对一些错误感到困惑.
第一个错误是
(...): In function `_ZN30RealTriDiagonalSymmetricMatrix14ResizeAndCleanEii':
/home/jorgen/diaghamsvn/DiagHam/src/Matrix/RealTriDiagonalSymmetricMatrix.cc:350:
undefined reference to `GarbageFlag::Used()'
Run Code Online (Sandbox Code Playgroud)
RealTriDiagonalSymmetricMatrix.cc中的违规行是:
if (this->Flag.Used() == true)
Run Code Online (Sandbox Code Playgroud)
我查找GarbageFlag.h文件,它包含函数Used() ; 这是它的一部分:
class GarbageFlag
{
private:
#ifdef __SMP__
pthread_mutex_t *FlagMutex;
#endif
public:
// default constructor
GarbageFlag();
// copy constructor
// flag = garbage flag to copy
GarbageFlag(const GarbageFlag& flag);
// destructor
~GarbageFlag();
// return value = reference on current garbage flag
GarbageFlag& operator = (const GarbageFlag& flag);
bool Used ();
Run Code Online (Sandbox Code Playgroud)
此外,RealTriDiagonalSymmetricMatrix.cc文件包含一个标题,该标题又包含GarbageFlag.h.所以我很困惑为什么它找不到这个功能.
此后有很多类似的错误.任何人都知道发生了什么事?
我有一个抽象类飞行.Flight包含调用私有方法调度的方法schedule()(最终Flight f)
public void schedule()
{
schedule(this);
}
private void schedule(final Flight f)
{
new Timer().schedule(new TimerTask()
{
@Override
public void run()
{
f.checkIn();
updateList();
}
}, this.getDate());
}
Run Code Online (Sandbox Code Playgroud)
现在让我说我有一个扩展Flight的类SouthWestFlight
Flight f = new SouthWestFlight(); //ignore the missing params doesn't matter for example
f.schedule();
Run Code Online (Sandbox Code Playgroud)
这会将Flight的实例或SouthWestFlight的实例作为schedule方法中的参数传递吗?
假设我有一个可序列化的类,比如
[Serializable]
public class DatabaseViewModel:MVVM.ObservableObject
{
//fields
//properties
public DatabaseViewModel()
{
//if a serialization file exists then deseralize and make this instance equal to it
//else initialize fields
}
}
Run Code Online (Sandbox Code Playgroud)
是否可以从类内部而不是调用范围中执行此类操作?
在调用范围我会做
var dbvm = new DatabaseViewModel();
Run Code Online (Sandbox Code Playgroud)
然后我希望构造函数决定它是应该创建一个新对象还是加载一个序列化对象.
在我班上我试过这个
this = //my serialized object
Run Code Online (Sandbox Code Playgroud)
如果我想从调用范围中做到这一点,我会这么做
DatabaseViewModel dbvm = null;
if(File.Exists(".../DatabaseViewModel.bin")
dbvm = //deserialize .../DatabaseViewModel.bin
else
dbvm = new DatabaseViewModel();
Run Code Online (Sandbox Code Playgroud) this ×10
c++ ×3
java ×3
c# ×2
javascript ×2
abstract ×1
class ×1
compilation ×1
constructor ×1
header-files ×1
jquery ×1
methods ×1
oop ×1
pointers ×1
vtable ×1